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