SHA-256的定义似乎是这样的,仅包含单个“1”位的输入具有明确定义的哈希值,并且与“01”字节的哈希值不同(因为填充是基于输入的位数完成的)。
但是,由于字节序问题以及我找不到任何支持输入单个位的实现,我无法弄清楚正确的哈希值是什么。
那么,“1”比特的长度为1的输入的正确哈希值是什么?(不是长度为8的byte[] {1}输入)。
SHA-256的定义似乎是这样的,仅包含单个“1”位的输入具有明确定义的哈希值,并且与“01”字节的哈希值不同(因为填充是基于输入的位数完成的)。
但是,由于字节序问题以及我找不到任何支持输入单个位的实现,我无法弄清楚正确的哈希值是什么。
那么,“1”比特的长度为1的输入的正确哈希值是什么?(不是长度为8的byte[] {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
hashlib.sha256().block_size
返回 64
。 - Tyler Pantuso