我读了一些关于 md5的文档,它说它是128位的,但是为什么它是32个字符呢?我无法计算字符。
编辑:
SHA-1产生160位,那么有多少个字符呢?
以十六进制表示的32个字符,即每字节2个字符。
那是32个十六进制字符-1个十六进制字符是4位。
那些是十六进制数字,不是字符。一个数字 = 4位。
它们实际上不是字符,而是十六进制数字。
MD5产生十六进制数字(0-15/0-F) ,因此每个数字是4位。128/4 = 32个字符。
SHA-1也生成十六进制数字(0-15/0-F) ,因此160/4 = 40个字符。
(因为它们是数学运算,所以大多数散列函数的输出通常表示为十六进制数字。)
您可能想到的是 ASCII 文本字符,即8位。
我想把一些答案总结成一篇文章。
首先,不要把 MD5散列想象成一个字符串,而是一个十六进制数。因此,每个数字是十六进制数字(0-15或0-F) ,表示4位,而不是8位。
进一步说,一个字节或八个位由两个十六进制数字表示,例如 b‘ 1111 1111’= 0xFF = 255。
1111 1111
0xFF
255
MD5散列长度为128位,通常由32个十六进制数字表示。
SHA-1散列长度为160位,通常由40个十六进制数字表示。
对于 SHA-2系列,我认为散列长度可以是预先确定的集合之一。所以 SHA-512可以用128个十六进制数来表示。
同样,这篇文章只是基于以前的答案。
要清楚的位与字节,字符。
2**8
当你看到 十六进制字符,
[0-9] + [a-f]
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
[0-9a-f][0-9a-f]
当您查看 正则单字节字符,时(这里我们将完全跳过多字节和宽字符)
md5()
¡°ÀÐàð
因此,它们显然是不同的,我希望这能够提供对差异的最佳分解。
一个十六进制数 = 1 一点点(四位)
两个十六进制数 = 1字节(8位)
MD5 = 32个十六进制数字
32个十六进制数 = 16字节(32/2)
16字节 = 128位(16 * 8)
同样的情况也适用于 SHA-1,只不过它的长度是40个十六进制数字。
希望这个能帮上忙。
为了便于理解,请复制 二进制到六进制转换器中计算出的 MD5128位散列值,并查看十六进制值的长度。你会得到32个十六进制字符。