MD5 与 Base64一起使用 加密,计算原理
2017-07-02 16:05
585 查看
加密原文:
1234
加密后的结果:
gdyb21LQTcIANtvYMT7QVQ==
22位(不包括等于号)
123456
4QrcOUm6Wau+VuBX8g+IPg==
如何计算
1.使用MD5,取得信息摘要
1234对应的信息摘要如下
[-127, -36, -101, -37, 82, -48, 77, -62, 0, 54, -37, -40, 49, 62, -48, 85]
一共 16 byte
16*8=128
128%6=2
21余2
2.使用Base64再次处理
1.将每三个字节分成一组,一共24个二进制位:3*8=24
2.将这24个二进制位分成4组,每组有6个二进制位:24/4=6
3.在每组前加两00,扩展成32个二进制位,即4个字节:4*(6+2)=32
4.根据下面的编码表,得到扩展后每个字节的对应符号,就是Base64的编码值
注意:
1.因为转换后的每个字符的最高两位都是0,所以实际有效位数是6位,
也就是26=64个字符就可以覆盖所有的编码。
2.如果剩下的字符不足3个字节,则用0填充,输出字符使用"=",
因此编码后输出的文本末尾可能会出现1或2个"="。
3.因为Base64将3个字节转化成4个字节,因此Base64编码后的文本,
会比原文本大出三分之一左右。
补=的规律:
(如果N*8%6后余2个二进制位,就补2个=,余4个二进制位就补一个=,整除不补)
剩余两位 ,2*8=16 % 6 结果为(余数为) 4
剩余一位,1*8=8 %6 结果为(余数为) 2
前三位对应的二进制(正数的补码)
-127
10000001
-36
11011100
-101
10011011
转化为四个字符(3*8bit=4*6bit)
100000 ⇒32 ⇒g
011101 ⇒29 ⇒d
110010 ⇒50 ⇒y
011011 ⇒27 ⇒b
补充说明
MD5是一种信息摘要算法,并不是加密算法
相关知识
1.负数二进制表示
正数对应的反码
反码加1,取得补码
补码就是负数的二进制表示
2.base64编码表
加密原文:
1234
加密后的结果:
gdyb21LQTcIANtvYMT7QVQ==
22位(不包括等于号)
123456
4QrcOUm6Wau+VuBX8g+IPg==
如何计算
1.使用MD5,取得信息摘要
1234对应的信息摘要如下
[-127, -36, -101, -37, 82, -48, 77, -62, 0, 54, -37, -40, 49, 62, -48, 85]
一共 16 byte
16*8=128
128%6=2
21余2
2.使用Base64再次处理
1.将每三个字节分成一组,一共24个二进制位:3*8=24
2.将这24个二进制位分成4组,每组有6个二进制位:24/4=6
3.在每组前加两00,扩展成32个二进制位,即4个字节:4*(6+2)=32
4.根据下面的编码表,得到扩展后每个字节的对应符号,就是Base64的编码值
注意:
1.因为转换后的每个字符的最高两位都是0,所以实际有效位数是6位,
也就是26=64个字符就可以覆盖所有的编码。
2.如果剩下的字符不足3个字节,则用0填充,输出字符使用"=",
因此编码后输出的文本末尾可能会出现1或2个"="。
3.因为Base64将3个字节转化成4个字节,因此Base64编码后的文本,
会比原文本大出三分之一左右。
补=的规律:
(如果N*8%6后余2个二进制位,就补2个=,余4个二进制位就补一个=,整除不补)
剩余两位 ,2*8=16 % 6 结果为(余数为) 4
剩余一位,1*8=8 %6 结果为(余数为) 2
前三位对应的二进制(正数的补码)
-127
10000001
-36
11011100
-101
10011011
转化为四个字符(3*8bit=4*6bit)
100000 ⇒32 ⇒g
011101 ⇒29 ⇒d
110010 ⇒50 ⇒y
011011 ⇒27 ⇒b
补充说明
MD5是一种信息摘要算法,并不是加密算法
相关知识
1.负数二进制表示
正数对应的反码
反码加1,取得补码
补码就是负数的二进制表示
2.base64编码表
索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 |
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | ||
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
package com.accenture.ams.lms.util; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import sun.misc.BASE64Encoder; @SuppressWarnings("restriction") public class MD5Util { /** * 利用MD5进行加密 * * @param str * 待加密的字符串 * @return 加密后的字符串 * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static String EncoderByMd5(String str) { if (str == null) { return null; } try { // 确定计算方法 MessageDigest md5 = MessageDigest.getInstance("MD5"); BASE64Encoder base64en = new BASE64Encoder(); // 加密后的字符串 return base64en.encode(md5.digest(str.getBytes("utf-8"))); } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { return null; } } }
相关文章推荐
- iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全
- IOS开发之—— 各种加密的使用(MD5,base64,DES,AES)
- 使用Apache digest可以做md5 SHA1 BASE64加密
- 使用commons-codec包加密字符串(MD5,SHA1,BASE64)
- iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全
- 使用asp.net提供的MD5实现加密计算
- 使用commons-codec包加密字符串(MD5,SHA1,BASE64)
- MD5加密原理和使用
- 加密原理介绍,代码实现DES、AES、RSA、Base64、MD5
- Java使用commons codec进行Md5,sha1,base64加密
- 加密原理介绍,代码实现DES、AES、RSA、Base64、MD5
- 使用commons-codec包加密字符串(MD5,SHA1,BASE64)
- 使用commons-codec包加密字符串(MD5,SHA1,BASE64)
- 使用Apache digest可以做md5 SHA1 BASE64加密
- java中使用MD5进行加密
- java中使用MD5进行加密
- java中使用MD5进行加密
- java中使用MD5进行加密
- 加密解密类库集--Cryptography、CRC32、MD5、BASE64
- [导入]ASP.NET中使用MD5和SHA1算法加密