MD5是128位,但为什么是32个字符?

| 我读了一些有关md5的文档,它说它是128位,但是为什么是32个字符?我无法计算字符。 1个字节为8位 如果1个字符是1个字节 那么128位是128/8 = 16字节对吗? 编辑: SHA-1产生160位,那么那里有多少个字符?     
已邀请:
        以十六进制表示的32个字符,即每个字节2个字符。     
        我想将一些答案总结为一篇文章。 首先,不要将MD5哈希视为字符串,而是十六进制数字。因此,每个数字都是十六进制数字(0-15或0-F),代表四个位,而不是八个位。 更进一步,一个字节或八位由两个十六进制数字表示,例如b \'
1111 1111
\'=
0xFF
=
255
。 MD5散列的长度为128位,通常由32个十六进制数字表示。 SHA-1哈希长度为1​​60位,通常由40个十六进制数字表示。 对于SHA-2系列,我认为哈希长度可以是预定集合之一。因此SHA-512可以由128个十六进制数字表示。 同样,这篇文章只是基于以前的答案。     
        十六进制“字符”(半字节)不同于“字符” 要在位,字节,字符上清楚。 1个字节为8位(出于我们的目的) 8位提供
2**8
种可能的组合:256种组合 当您查看一个十六进制字符时,
[0-9] + [a-f]
的16种组合:
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
的完整范围 16小于256,因此一个十六进制字符不存储一个字节。 16是
2**4
:表示一个十六进制字符可以在一个字节(半字节)中存储4位。 因此,两个十六进制字符可以存储8位,
2**8
组合。 表示为十六进制字符的字节为
[0-9a-f][0-9a-f]
,表示字节的两半(我们将半字节称为半字节)。 当您查看常规的单字节字符时,(在这里,我们将完全跳过多字节和宽字符) 它可以存储16种以上的组合。 字符的功能由编码确定。例如,存储整个字节的ISO 8859-1会存储所有这些内容 所有这些东西占整个3分范围。 如果ѭ10中的十六进制字符可以存储所有内容,您会看到所有小写字母,所有大写字母,所有标点符号和诸如
¡°ÀÐàð
之类的东西,空白(如(换行符和制表符))和控制字符(您甚至看不到,而且其中许多都没有使用)。 因此它们显然是不同的,我希望能最好地打破这些差异。     
        MD5产生十六进制数字(0-15 / 0-F),因此它们每个都是4位。 128/4 = 32个字符。 SHA-1也会产生十六进制数字(0-15 / 0-F),因此160/4 = 40个字符。 (由于它们是数学运算,因此大多数散列函数的输出通常表示为十六进制数字。) 您可能正在考虑8位的ASCII文本字符。     
        那是32个十六进制字符-1个十六进制字符是4位。     
        这些是十六进制数字,而不是字符。一位= 4位。     
        它们实际上不是字符,而是十六进制数字。     
        1个十六进制数字= 1个半字节(四位) 两个十六进制数字= 1个字节(八位) MD5 = 32位十六进制数字 32个十六进制数字= 16个字节(32/2) 16个字节= 128位(16 * 8) SHA-1的长度为40个十六进制数字,这一点同样适用。 我希望这有帮助。     

要回复问题请先登录注册