MD5值演算法原理

2022-09-16 17:00:15 字數 4481 閱讀 1285

md5

原理說明

一、md5

演算法介紹。

md5,即「message-digest algorithm 5(資訊-摘要演算法)」,從名字來看就知道它是從md3、md4發展而來的一種加密演算法,其主要通過採集檔案的資訊摘要,以此進行計算並加密。通過md5演算法進行加密,檔案就可以獲得乙個唯一的md5值,這個值是獨一無二的,就像我們的指紋一樣,因此我們就可以通過檔案的md5值來確定檔案是否正確,密碼進行加密後也會生成md5值,論壇就是通過md5值來驗證使用者的密碼是否正確的。

二、md5

演算法實現。

md5是輸入不定長度資訊,輸出固定長度128-bits的演算法。經過程式流程,生成四個32位資料,最後聯合起來成為乙個128-bits雜湊。基本方式為,求餘、取餘、調整長度、與鏈結變數進行迴圈運算。得出結果。

1、填充編碼。

在md5

演算法中,首先需要對資訊進行填充,使其位長對

512求餘的結果等於

448。因此,資訊的位長(

bits length

)將被擴充套件至

n*512+448,n

為乙個非負整數,

n可以是零。填充的方法如下,在資訊的後面填充乙個

1和無數個

0,直到滿足上面的條件時才停止用

0對資訊的填充。然後,在這個結果後面附加乙個以

64位二進位制表示的填充前首席資訊官度。經過這兩步的處理,現在的資訊的位長

=n*512+448+64=(n+1

)*512

,即長度恰好是

512的整

數倍。這樣做的原因是為滿足後面處理中對首席資訊官度的要求。

2、演算法實現。

如右圖,乙個md5運算由類似的64次迴圈構成,分成4組16次。f乙個非線性函式;乙個函式運算一次。mi表示乙個 32-bits 的輸入資料,ki表示乙個 32-bits 常數,用來完成每次不同的計算。

主迴圈有四輪(md4

只有三輪),每輪迴圈都很相似。第一輪進行

16次操作。每次操作對a、

b、c和

d中的其中三個作一次非線性函式運算,然後將所得結果加上第四個變數,文字的乙個子分組和乙個常數。再將所得結果向左環移乙個不定的數,並加上a、

b、c或

d中之一。最後用該結果取代a、

b、c或

d中之一。

以下是每次操作中用到的四個非線性函式(每輪乙個)。

f(x,y,z) =(x&y)|((~x)&z)

g(x,

y,z) =(x&z)|(y&(~z))

h(x,

y,z) =x^y^z

i(x,

y,z)=y^(x|(~z))

(&;是與,

|是或,

~是非,

^是異或)

具體這64

次迴圈(分

4輪)過程函式如下:

第一輪:(md5一共4

輪)ff(a,b,c,d,m0,7,0xd76aa478)

ff(d,a,b,c,m1,12,0xe8c7b756

)ff(c,

d,a,b,m2,17,0x242070db)

ff(b,c,d,a,m3,22,0xc1bdceee)

ff(a,b,c,d,m4,7,0xf57c0faf)

ff(d,a,b,c,m5,12,0x4787c62a)

ff(c,d,a,b,m6,17,0xa8304613

)ff(b,c,d,a,m7,22,0xfd469501

)ff(a,b,c,d,m8,7,0x698098d8

)ff(d,a,b,c,m9,12,0x8b44f7af)

ff(c,d,a,b,m10,17,0xffff5bb1

)ff(b,c,d,a,m11,22,0x895cd7be)

ff(a,b,c,d,m12,7,0x6b901122

)ff(d,a,b,c,m13,12,0xfd987193

)ff(c,

d,a,b,m14,17,0xa679438e)

ff(b,c,d,a,m15,22,0x49b40821

)第二輪

gg(a,b,c,d,m1,5,0xf61e2562

)gg(d,a,b,c,m6,9,0xc040b340

)gg(c,d,a,b,m11,14,0x265e5a51

)gg(b,c,d,a,m0,20,0xe9b6c7aa)

gg(a,b,c,d,m5,5,0xd62f105d)

gg(d,a,b,c,m10,9,0x02441453

)gg(c,d,a,b,m15,14,0xd8a1e681

)gg(b,c,d,a,m4,20,0xe7d3fbc8

)gg(a,b,c,d,m9,5,0x21e1cde6

)gg(d,a,b,c,m14,9,0xc33707d6

)gg(c,d,a,b,m3,14,0xf4d50d87

)gg(b,c,d,a,m8,20,0x455a14ed)

gg(a,b,c,d,m13,5,0xa9e3e905

)gg(d,a,b,c,m2,9,0xfcefa3f8

)gg(c,d,a,b,m7,14,0x676f02d9

)gg(b,c,d,a,m12,20,0x8d2a4c8a)

第三輪hh(a,b,c,d,m5,4,0xfffa3942

)hh(d,a,b,c,m8,11,0x8771f681

)hh(c,d,a,b,m11,16,0x6d9d6122

)hh(b,c,d,a,m14,23,0xfde5380c)

hh(a,b,c,d,m1,4,0xa4beea44

)hh(d,a,b,c,m4,11,0x4bdecfa9

)hh(c,d,a,b,m7,16,0xf6bb4b60

)hh(b,c,d,a,m10,23,0xbebfbc70

)hh(a,b,c,d,m13,4,0x289b7ec6

)hh(d,a,b,c,m0,11,0xeaa127fa)

hh(c,d,a,b,m3,16,0xd4ef3085

)hh(b,c,d,a,m6,23,0x04881d05

)hh(a,b,c,d,m9,4,0xd9d4d039

)hh(d,a,b,c,m12,11,0xe6db99e5

)hh(c,d,a,b,m15,16,0x1fa27cf8

)hh(b,c,d,a,m2,23,0xc4ac5665

)第四輪

ⅱ(a,b,c,d,m0,6,0xf4292244

)ⅱ(d,a,b,c,m7,10,0x432aff97

)ⅱ(c,d,a,b,m14,15,0xab9423a7

)ⅱ(b,c,d,a,m5,21,0xfc93a039

)ⅱ(a,b,c,d,m12,6,0x655b59c3

)ⅱ(d,a,b,c,m3,10,0x8f0ccc92

)ⅱ(c,d,a,b,m10,15,0xffeff47d)

ⅱ(b,c,d,a,m1,21,0x85845dd1

)ⅱ(a,b,c,d,m8,6,0x6fa87e4f)

ⅱ(d,a,b,c,m15,10,0xfe2ce6e0)

ⅱ(c,d,a,b,m6,15,0xa3014314

)ⅱ(b,c,d,a,m13,21,0x4e0811a1

)ⅱ(a,b,c,d,m4,6,0xf7537e82

)ⅱ(d,a,b,c,m11,10,0xbd3af235

)ⅱ(c,d,a,b,m2,15,0x2ad7d2bb)

ⅱ(b,c,d,a,m9,21,0xeb86d391

)三、md5

演算法的不足。

現在看來,md5已經較老,雜湊長度通常為128位,隨著計算機運算能力提高,找到「碰撞」是可能的。因此,在安全要求高的場合不使用md5。

2023年,王小雲教授證明md5數字簽名演算法可以產生碰撞。2023年,marc stevens,arjen k. lenstra和benne de weger進一步指出通過偽造軟體簽名,可重複性攻擊md5演算法。研究者使用字首碰撞法(chosen-prefix collision),使程式前端包含惡意程式,利用後面的空間添上垃圾**湊出同樣的md5 hash值。2023年,荷蘭埃因霍芬技術大學科學家成功把2個可執行檔案進行了md5碰撞,使得這兩個執行結果不同的程式被計算出同乙個md5。2023年12月科研人員通過md5碰撞成功生成了偽造的ssl證書,這使得在https協議中伺服器可以偽造一些根ca的簽名。

md5被攻破後,在crypto2008上, rivest提出了md6演算法,該演算法的block size為512 bytes(md5的block size是512 bits), chaining value長度為1024 bits, 演算法增加了並行 機制,適合於多核cpu。 在安全性上,rivest宣稱該演算法能夠抵抗截至目前已知的所有的 攻擊(包括差分攻擊)。

MD5演算法原理

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

MD5加密原理

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

hash演算法原理之md5過程

進製數零一 二三四五 六七 十十一十二十三 十四十五十六 十進位制012 3456 78910 111213 二進位制0110 11100 101110 111 十六進製制01 2345 6789 abcd ef10 計算機的儲存單位為位元組,乙個位元組對應8個二進位制位,共可以表示2 8也就是25...