我正在尝试实现RFC 5683,它依赖于描述如下的散列函数:
H1 = SHA-1(1|1|z) mod 2^128 | SHA-1(1|2|z) mod 2^128 |...| SHA-1(1|9|z) mod 2^128
其中z
是要散列的字符串。我理解的部分如下:
为了为H1创建1152个输出位,对SHA-1进行9次调用,并使用每个输出的128个最低有效位。
一旦我从哈希函数得到输出(我使用 SHA-256 而不是SHA1),我如何从该哈希获得128个“最低有效位”?我正在使用的库能够输出为8 x 32位整数的数组:
[-1563099236, 1891088516, -531757887, -2069381238, 131899433, -1500579251, 74960544, -956781525]
或者作为64个字符的十六进制字符串:
"a2d4ff9c70b7b884e04e04c184a7bf8a07dca029a68efa4d0477cea0c6f8ac2b"
但我对如何从这些表示中恢复最低有效位感到茫然。
答案 0 :(得分:1)
鉴于十六进制字符串:
a2d4ff9c70b7b884e04e04c184a7bf8a 07dca029a68efa4d0477cea0c6f8ac2b
most significant <- | -> least significant
64个字符 - &gt; 256位,所以128位将是字符串的一半。在字符串末尾最不重要,在字符串的开头最重要。