atitit.md5算法的原理 与 总结 1. MD5的位数 128位 2. 字节数组转换为32位字符串 base16 3. md5的base64表示法 4. 参考

atitit.md5算法的原理 与 总结

 

 

1MD5的位数 1281

2字节数组转换为32位字符串 base161

2.1. 十六进制字符用4个二进制位来表示1

2.2. byte[]和十六进制字符串相互转换2

3md5base64表示法3

4参考3

 

 

 

生成一个128为的字节数组。。

 

 

2. 字节数组转换为32位字符串 base16

4位可以1111

 

正好0--f 可以完整的标识4位比特。。

2.1. 十六进制字符用4个二进制位来表示

十六进制的每个字符需要用4位二进制位来表示

2的四次方等于16。所以要用4个二进制位表示一个十六进制字符

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

如下所示:

 

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

A

1010

B

1011

C

1100

D

1101

E

1110

F

1111

 

2.2. byte[]和十六进制字符串相互转换

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示。

所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果

new String(H) + new String(L)。

同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。

根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了

 

3. md5的base64表示法

4. 参考

Java byte数组与十六进制字符串互转 鑫鑫哥哥呀的个人页面 开源中国社区.htm

Java利用MessageDigest获取字符串或文件MD5详解 鼠穴 开源中国社区.htm