11

SHA-256 的定义似乎是这样的:由单个“1”位组成的输入具有明确定义的哈希值,与“01”字节的哈希值不同(因为填充是根据输入的位长度完成的)。

但是,由于字节顺序问题以及我找不到支持单比特馈送的实现这一事实,我无法完全弄清楚这个正确的值是什么。

那么,由位“1”组成的1 位长输入的正确散列是什么?(不是 8 位长字节 [] { 1 } 输入)。

4

3 回答 3

11

好的,根据我自己的实现:

1 位字符串“1”

B9DEBF7D 52F36E64 68A54817 C1FA0711 66C3A63D 384850E1 575B42F7 02DC5AA1

1 位字符串“0”

BD4F9E98 BEB68C6E AD3243B1 B4C7FED7 5FA4FEAA B1F84795 CBD8A986 76A2A375

我已经在几个标准的 8 位倍数输入(包括 0 位字符串)上测试了这个实现,结果是正确的。

(当然,这个问题的重点是首先验证上述输出,因此请谨慎使用......)

于 2010-12-12T19:01:08.340 回答
3

不确定我是否正确理解了您的问题。

SHA-256 以 64 字节(=512 位)的块大小运行。这意味着必须首先填充较小的输入。填充的结果如下所示:

For Bit 1:    1100000000000...00000000001
For Bits 01:  0110000000000...00000000010

由于此结果不同,因此以下压缩函数的结果也将不同。因此哈希值是。标准文档非常详细地解释了填充:http: //csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

于 2010-12-12T18:43:13.030 回答
2

RFC 4634的第 8 节中有可用的 C 代码来计算不一定是 8 位倍数的数据的哈希值。查看名称为 的方法。SHA*FinalBits(...)

于 2010-12-12T19:29:46.163 回答