从散列中获取128个最重要的位

时间:2013-07-08 18:38:04

标签: hash bitwise-operators bits

我正在尝试实现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"

但我对如何从这些表示中恢复最低有效位感到茫然。

1 个答案:

答案 0 :(得分:1)

鉴于十六进制字符串:

a2d4ff9c70b7b884e04e04c184a7bf8a 07dca029a68efa4d0477cea0c6f8ac2b
           most significant <-  | -> least significant

64个字符 - &gt; 256位,所以128位将是字符串的一半。在字符串末尾最不重要,在字符串的开头最重要。