ken*_*ytm 86
一个十六进制字符只能表示16个不同的值,即4位.(16 = 2 4)
40×4 = 160.
不,你需要在base-36中超过5个字符.
共有2 160个不同的SHA-1哈希值.
2 160 = 16 40,所以这是我们需要40个十六进制数字的另一个原因.
但是2 160 = 36 160 log 36 2 = 36 30.9482 ...,所以你仍然需要使用base-36的31个字符.
每个8位字节有两个十六进制字符,而不是每个十六进制字符两个字节.
如果使用8位字节(如在SHA-1定义中),则十六进制字符在一个字节内编码单个高或低4位半字节.因此,完整字节需要两个这样的字符.
我的答案仅与我的理论中关于 OP 混淆的确切起源的先前答案不同,并且在我提供的初步步骤中进行了说明。
根据所使用的编码,一个字符占用不同数量的字节(请参阅此处)。如今,当我们使用每个字符 2 个字节时,有一些上下文,例如在用 Java 编程时(这就是原因)。因此,40 个 Java 字符将等于 80 个字节 = 640 位,OP 的计算和 10 个 Java 字符确实会封装正确数量的 SHA-1 哈希信息。
然而,与数千个可能的 Java 字符不同,只有 16 个不同的十六进制字符,即 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E 和 F . 但这些与 Java 字符不同,占用的空间远小于 Java 字符 0 到 9 和 A 到 F 的编码。它们是表示仅由 4 位表示的所有可能值的符号:
0 0000 4 0100 8 1000 C 1100
1 0001 5 0101 9 1001 D 1101
2 0010 6 0110 A 1010 E 1110
3 0011 7 0111 B 1011 F 1111
Run Code Online (Sandbox Code Playgroud)
因此,每个十六进制字符只有半个字节,而 40 个十六进制字符为我们提供了 20 个字节 = 160 位 - SHA-1 哈希的长度。
| 归档时间: |
|
| 查看次数: |
53320 次 |
| 最近记录: |