MD5是128位,但为什么它是32个字符?
我读了一些有关md5的文档,它说128位,但是为什么是32个字符呢? 我无法计算字符。
- 1个字节是8位
- 如果1个字符是1个字节
- 那么128位是128/8 = 16字节吧?
编辑:
SHA-1产生160位,所以有多less个字符?
32个字符作为hex表示,即每个字节2个字符。
我想在一篇文章中总结一些答案。
首先,不要将MD5散列视为string,而应视为hex数字。 因此,每个数字是一个hex数字(0-15或0-F),代表四个位,而不是八个。
进一步来说,一个字节或八位由两个hex数字表示,例如1111 1111
'= 0xFF
= 255
。
MD5散列长度为128位,通常由32个hex数字表示。
SHA-1散列长度为160位,一般用40个hex数字表示。
对于SHA-2系列,我认为散列长度可以是预先确定的集合之一。 所以SHA-512可以用128个hex数字表示。
再一次,这篇文章只是基于以前的答案。
MD5产生hex数字(0-15 / 0-F),所以它们是四位。 128/4 = 32个字符。
SHA-1也产生hex数字(0-15 / 0-F),所以160/4 = 40个字符。
(由于它们是math运算,所以大部分散列函数的输出通常用hex数字表示)。
您可能正在考虑ASCII文本字符,它们是8位。
hex“字符”(半字节)不同于“字符”
要清楚的位vs字节,vs字符。
- 1字节是8位(用于我们的目的)
- 8位提供
2**8
可能的组合:256种组合
当你看一个hex字符时,
-
[0-9] + [af]
16个组合:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
的全部范围0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
- 16小于256,所以一个hex字符不存储一个字节。
- 16是
2**4
:这意味着一个hex字符可以在一个字节中存储4位。 - 因此,两个hex字符,可以存储8位,
2**8
组合。 - 表示为hex字符的字节是
[0-9a-f][0-9a-f]
,表示一个字节的二分之二(我们称半字节为半字节 )。 实际上依赖于规格或平台的顺序:0F
可以表示00001111
或11110000
。
当你看一个正规的人物,
- 它可以存储远远超过16个组合。
- 字符的能力由编码决定。 例如, ISO 8859-1存储所有这些东西
- 所有的东西都需要整个
2**8
范围。 - 如果一个
md5()
中的hex字符可以存储所有的内容,你可以看到所有的小写字母,所有的大写字母,所有的标点符号,像¡°ÀÐàð
换行符”和“制表符”这样的空格,字符(你甚至不能看到,其中许多字符都没有使用)。
所以他们明显不同,我希望能提供最好的分歧。
这是32个hex字符 – 1个hex字符是4位。
那些是hex数字,而不是字符。 一位数= 4位。
他们实际上不是字符,而是hex数字。