Hash 从散列中获取128个最高有效位
我正在尝试实现,它依赖于一个散列函数,如下所述:Hash 从散列中获取128个最高有效位,hash,bitwise-operators,bits,Hash,Bitwise Operators,Bits,我正在尝试实现,它依赖于一个散列函数,如下所述: 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进行了九次调用,并使用每个输出的128个最低有效位。 一旦我从散列函数中获得输出(我使用的是SHA-256而不是SHA1),如何从该散列中获得128个“最低有效位”?我使用的库可以输出为8 x
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进行了九次调用,并使用每个输出的128个最低有效位。
一旦我从散列函数中获得输出(我使用的是SHA-256而不是SHA1),如何从该散列中获得128个“最低有效位”?我使用的库可以输出为8 x 32位整数的数组:
[-1563099236, 1891088516, -531757887, -2069381238, 131899433, -1500579251, 74960544, -956781525]
或作为64个字符的十六进制字符串:
"a2d4ff9c70b7b884e04e04c184a7bf8a07dca029a68efa4d0477cea0c6f8ac2b"
但我不知道如何从这些表示中恢复最低有效位。给定十六进制字符串:
a2d4ff9c70b7b884e04e04c184a7bf8a 07dca029a68efa4d0477cea0c6f8ac2b
most significant <- | -> least significant
a2d4ff9c70b7b884e04e04c184a7bf8a 07dca029a68efa4d0477cea0c6f8ac2b
最显著最不显著
64个字符->256位,因此128位将是字符串的一半。最不重要的在字符串的末尾,最重要的在字符串的开头