我读了一些关于md5的文档,它说它的128位,但为什么它是32个字符?我无法计算角色。
编辑:
SHA-1产生160位,那么有多少个字符?
答案 0 :(得分:89)
以十六进制表示的32个字符,即每字节2个字符。
答案 1 :(得分:28)
我想将一些答案总结成一篇文章。
首先,不要将MD5哈希视为字符串,而是将其视为十六进制数。因此,每个数字都是十六进制数字(0-15或0-F),代表四位,而不是八位。
进一步说,一个字节或八个比特由两个十六进制数字表示,例如, b'1111 1111
'= 0xFF
= 255
。
MD5哈希长度为128位,通常用32位十六进制数字表示。
SHA-1哈希长度为160位,通常用40个十六进制数字表示。
对于SHA-2系列,我认为哈希长度可以是预先确定的一组。因此SHA-512可以用128个十六进制数字表示。
同样,这篇文章仅基于之前的答案。
答案 2 :(得分:21)
要清楚比特与字节,对比字符。
2**8
种可能的组合:256种组合当您查看十六进制字符时,
[0-9] + [a-f]
的16种组合:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
:这意味着一个十六进制字符可以在一个字节(半个字节)中存储4位。2**8
组合。[0-9a-f][0-9a-f]
,表示一个字节的两半(我们将半字节称为nibble)。当您查看常规单字节字符时(我们完全会在此处跳过多字节和宽字符)
2**8
范围。md5()
中的十六进制字符可以存储所有内容,您可以看到所有小写字母,所有大写字母,所有标点符号和¡°ÀÐàð
之类的内容,像空格一样(换行符和制表符)和控制字符(您甚至无法看到这些字符,其中许多字符未被使用)。所以他们明显不同,我希望能够最好地区分差异。
答案 3 :(得分:18)
MD5产生十六进制数字(0-15 / 0-F),因此它们各为4位。 128/4 = 32个字符。
SHA-1也产生十六进制数字(0-15 / 0-F),因此160/4 = 40个字符。
(由于它们是数学运算,因此大多数散列函数的输出通常表示为十六进制数字。)
您可能正在考虑ASCII文本字符,即8位。
答案 4 :(得分:8)
这是32个十六进制字符 - 1个十六进制字符是4位。
答案 5 :(得分:2)
这些是十六进制数字,而不是字符。一位= 4位。
答案 6 :(得分:2)
它们实际上不是字符,它们是十六进制数字。
答案 7 :(得分:0)
一个十六进制数字 = 1 nibble(四位)
两个十六进制数字 = 1个字节(八位)
MD5 = 32个十六进制数字
32个十六进制数字 = 16个字节(32/2)
16个字节 = 128位(16 * 8)
SHA-1相同,但长度为40个十六进制数字。
我希望这会有所帮助。
答案 8 :(得分:0)
为了清楚理解,将MD5计算出的128位hash值复制到Binary to Hex convertor中,查看Hex值的长度。您将获得 32 个字符的十六进制字符。