2016-03-02 58 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