2016-03-02 57 views
0

在维基百科SHA-1 pseudocode,它表示:SHA1碰撞小于512位

预处理:比特“1”附加到该消息例如如果消息长度是8位的倍数,则通过添加0x80 。追加0≤ķ< 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 

原来不一样,为什么?

+0

'hashlib.sha1'已经是SHA-1的完整实现了。你不需要预处理任何东西。 – Hamms

+0

我想知道碰撞是否小于512位输入 – whi

回答

1

\x01\x0001预处理后不能相同。

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

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

  • 第一步:填写让其长度= 448(模512)。我们首先追加1位,然后追加0

因此,对于\x01,变得\x01800000...000,其长度是448个比特,和省略号表示0六角

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

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

从上面提到的,在预加工,\x01变得\x01800000...08,并且整个长度为512,省略号表示0六角

+0

因此总而言之,我们应该说从'\ x1'到任何100 TB长度的数据,现在还没有发现160位sha1摘要的碰撞吗? – whi