sha1小于512位的冲突

时间:2016-03-02 07:03:09

标签: python collision sha1

在维基百科SHA-1 pseudocode中,它说:

  

预处理:将位'1'附加到消息中,例如通过添加0x80   如果消息长度是8位的倍数。追加0≤k< 512位   '0',这样得到的消息长度为位

\x01x00\x01相同吗?

Python示例:

import hashlib
for s in ('01', '0001'):
    m=hashlib.sha1()
    m.update(s.decode('hex'))
    print m.hexdigest()

>>>bf8b4530d8d246dd74ac53a13471bba17941dff7
>>>0e356ba505631fbf715758bed27d503f8b260e3a

事实证明不是一样的,为什么?

1 个答案:

答案 0 :(得分:1)

预处理后

\x01\x0001不能相同。

我认为你误解了Wiki中的伪代码。在这里,我以\x01\x0001为例,其长度小于512位。

(现在假设原始消息长度小于448位)

  • 第一步:填写以使其长度 = 448(mod 512)。我们首先附加1位,然后附加0

因此,对于\x01,它变为\x01800000...000,其长度为448位,省略号代表十六进制中的0

  • 第二步:填写长度。我们应该添加提醒(512 - 448) = 64位来表示其原始长度。

因此,对于\x01,其原始长度为8,它应附加\x00000000 00000008

如上所述,预处理后,\x01变为\x01800000...08,整个长度为512,省略号代表十六进制中的0。< / p>