SHA-256 的定义似乎是这样的:由单个“1”位组成的输入具有明确定义的哈希值,与“01”字节的哈希值不同(因为填充是根据输入的位长度完成的)。
但是,由于字节顺序问题以及我找不到支持单比特馈送的实现这一事实,我无法完全弄清楚这个正确的值是什么。
那么,由位“1”组成的1 位长输入的正确散列是什么?(不是 8 位长字节 [] { 1 } 输入)。
SHA-256 的定义似乎是这样的:由单个“1”位组成的输入具有明确定义的哈希值,与“01”字节的哈希值不同(因为填充是根据输入的位长度完成的)。
但是,由于字节顺序问题以及我找不到支持单比特馈送的实现这一事实,我无法完全弄清楚这个正确的值是什么。
那么,由位“1”组成的1 位长输入的正确散列是什么?(不是 8 位长字节 [] { 1 } 输入)。
好的,根据我自己的实现:
1 位字符串“1”:
B9DEBF7D 52F36E64 68A54817 C1FA0711 66C3A63D 384850E1 575B42F7 02DC5AA1
1 位字符串“0”:
BD4F9E98 BEB68C6E AD3243B1 B4C7FED7 5FA4FEAA B1F84795 CBD8A986 76A2A375
我已经在几个标准的 8 位倍数输入(包括 0 位字符串)上测试了这个实现,结果是正确的。
(当然,这个问题的重点是首先验证上述输出,因此请谨慎使用......)
不确定我是否正确理解了您的问题。
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