Md5擴充套件攻擊的原理和應用

2021-09-08 13:03:21 字數 1912 閱讀 4416

演算法實現有誤

演算法正確

md5的演算法原理如下圖所示

md5的演算法步驟是

將資料進行填充,首先新增0×80,接著新增0×00使得 (資料位元組數 + 8)%64 = 0

將資料的長度放入8位元組的陣列中,把低位元組放到前面,例如長度為1,8位元組的資料長度表示為00 00 00 00 00 00 00 01,把這個長度值轉化為低位元組在前面變成了01 00 00 00 00 00 00 00,將這個資料加入到整體的資料中。

以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為種子然後重複這個過程計算最後得到anbn***n

將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] )\              forj inxrange(0, 64, 4)]         defshift(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加密原理

簡單字串md5加密1.messagedigest.getinstance md5 digest 需要加密的字元 getbytes 計算出來的結果返回的byte長度始終為16位。2.要記住我們計算出來的md5 32位 最後都都是固定長度32的字串 byte有8位,假如全部都是 11111111 那麼對...

MD5演算法原理

訊息摘要 將任意長度的字元陣列處理成定長的字元陣列,用於確保原字串不被修改,也可以用做密碼確認,如果密碼一致,則md5產生後的值必然一致,否則不相同 public class datautil string src 唐 stringbuffer sb new stringbuffer byte b1...

MD5演算法的應用

md5演算法的應用 對資訊產生摘要 md5 tanajiya.tar.gz 0ca175b9c0f726a831d895e269332461 這就是tanajiya.tar.gz檔案的數字簽名。md5將整個檔案當作乙個大文字資訊,通過其不可逆的字串變換演算法,產生了這個唯一的md5資訊摘要。為了讓讀...