日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Md5扩展攻击的原理和应用

發布時間:2024/3/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Md5扩展攻击的原理和应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

*本文原創作者:Guilty and Innocent,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

?

做CTF題目的過程中遇到了md5擴展攻擊,參考了幾篇文章,感覺寫的都有些小缺陷,再發一篇文章,理解md5擴展攻擊首先需要了解md5的工作原理。

1)md5的工作原理

具體參考這兩篇文章

http://blog.csdn.net/adidala/article/details/28677393,算法實現有誤

https://www.rfc-editor.org/rfc/pdfrfc/rfc1321.txt.pdf,算法正確

md5的算法原理如下圖所示

Md5的算法步驟是

1、填充

將數據進行填充,首先添加0×80,接著添加0×00使得 (數據字節數 + 8)%64 = 0

2、增加長度

將數據的長度放入8字節的數組中,把低字節放到前面,例如長度為1,8字節的數據長度表示為00 00 00 00 00 00 00 01,把這個長度值轉化為低字節在前面變成了01 00 00 00 00 00 00 00,將這個數據加入到整體的數據中。

3、進行輪次變換

以64個字節為1組進行輪次變換,這一組中以4字節為1個單位分成16個數字。

首先準備A,B,C,D四個32位的字符,其中,????A = 0×67452301,B = 0xefcdab89

,C = 0x98badcfe,D = 0×10325476, ??將ABCD作為種子,與16個數字進行一種復雜的運算(運算方式見后文),運算結果為A1 B1 C1 D1,以A1 B1 C1 D1為種子然后重復這個過程計算最后得到AnBnCnDn

4、輸出hash值

將An進行類似于第二步的低字節順序的排列An’,同理對Bn,Cn,Dn進行同樣變換,An’,Bn’,Cn’,Dn’的簡單拼接就是最后結果。

注:這里簡單記錄一下正確的復雜算法

文獻1中的算法是錯誤的,正確的算法是

定義其中幾個子算法F = lambda x,y,z:((x&y)|((~x)&z))G = lambda x,y,z:((x&z)|(y&(~z))) H = lambda x,y,z:(x^y^z) I = lambda x,y,z:(y^(x|(~z))) def shift(a, count): ????????return (((a << count) | (a >> (32 -count)))&0xffffffff) 常量表: T_func = lambda i: int(4294967296*abs(math.sin(i))) & 0xffffffff T = [T_func(i) for i in xrange(1, 65)] T.insert(0 , 0) 復雜算法為 ????????INPUT_A = A ????????INPUT_B = B ????????INPUT_C = C ????????INPUT_D = D ????????M = [ (myord[i * 64?+ j + 3] <<24) + ?(myord[i * 64?+ j + 2] << 16?)+ (myord[i * 64?+ j + 1] << 8) + (myord[i * 64?+ j + 0] )\ ?????????????for?j in?xrange(0, 64, 4)] ????????def?shift(a, count): ????????????return?(((a << count) | (a >> (32?-count)))&0xffffffff) ????????#第一輪 ????????A = (B+ shift((A+F(B,C,D)+M[0]+T[1]) &0xffffffff,7) ) & 0xffffffff ????????D = (A+shift((D+F(A,B,C)+M[1]+T[2]) &0xffffffff?,12) )& 0xffffffff ????????C = (D+shift((C+F(D,A,B)+M[2]+T[3]) &0xffffffff,17) ) &0xffffffff ????????B = (C+shift((B+F(C,D,A)+M[3]+T[4]) &0xffffffff,22) )&0xffffffff ????????A = (B+shift((A+F(B,C,D)+M[4]+T[5]) &0xffffffff,7) )&0xffffffff ????????D = (A+shift((D+F(A,B,C)+M[5]+T[6])&0xffffffff,12) )&0xffffffff ????????C = (D+shift((C+F(D,A,B)+M[

總結

以上是生活随笔為你收集整理的Md5扩展攻击的原理和应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。