使用MD5變換演算法防窮舉 衝撞 破譯密碼

2021-04-02 15:10:27 字數 1979 閱讀 8851

使用md5變換演算法防窮舉(衝撞)破譯密碼

md5是在web應用程式中最常用的密碼加密演算法。由於md5是不可逆的,因而經過md5計算得到後的密文,不能通過逆向演算法得到原文。

回顧在web應用程式中使用md5加密文字密碼的初衷,就是為了防止資料庫中儲存的密碼不幸洩露後被直接獲得。但攻擊者不但擁有資料量巨大的密碼字典,而且建立了很多md5原文/密文對照資料庫,能快速地找到常用密碼的md5密文,是破譯md5密文的高效途徑。然而,md5密文資料庫所使用的是最常規的md5加密演算法:原文-->md5-->密文。因此,我們可以使用變換的md5演算法,使現成的md5密文資料庫無所作為。

下面演示一些變換演算法的例子

當然,在其它的web開發語言中,也大同小異,完全能得到相同的結果。 

變換一:迴圈md5

最容易理解的變換就是對乙個密碼進行多次的md5運算。自定義乙個函式,它接受$data和$times兩個形參,第乙個是要加密的密碼,第二個是重複加密的次數。實現這種變換有兩種演算法——

<?php

//迭代演算法

function 

md5_1_1

($data

, $times 

= 32

)return 

$data;}

//遞迴演算法

function 

md5_1_2

($data

, $times 

= 32

) else 

}?>

變換二:密文分割md5

儘管使用者的密碼是不確定的字串,但是只要經過一次md5運算後,就會得到乙個由32個字元組成的字串,這時可以再針對這個定長字串變換。有點bt的演算法是,把這段密文分割成若干段,對每段都進行一次md5運算,然後把這堆密文連成乙個超長的字串,最後再進行一次md5運算,得到仍然是長度為32位的密文。

<?php

//把密文分割成兩段,每段16個字元

function 

md5_2_1

($data

)//把密文分割成32段,每段1個字元

function 

md5_2_2

($data));

}//這時$data長度為1024個字元,再進行一次md5運算

return 

md5(

$data);}

?>

當然,這種密文分割的具體演算法是數之不盡的,比如可以把原密文分割成16段每段兩字元、8段每段4字元,或者每一段的字元數不相等……

變換三:附加字串干涉

在加密過程的乙個步驟中,附加乙個內容確定的字串(比如說使用者名稱),干涉被加密的資料。不可以用隨機字串,因為這樣會使原演算法無法重現。這種演算法在某些情況下是很具有優勢的,比如說用於大量的使用者密碼加密,可以把使用者名稱作為附加干涉字串,這樣攻擊者就算知道你的演算法,也很難從他們手中的字典中一下子生成海量的對照表,然後大量地破譯使用者密碼,只能有針對性的窮舉為數不多的使用者。

<?php

//附加字串在原資料的尾部

function 

md5_3_1

($data, )

//附加字串在原資料的頭部

function 

md5_3_2

($data, )

//附加字串在原資料的頭尾

function 

md5_3_3

($data, )

?>

變換四:大小寫變換干涉

由於php所提供的md5()函式返回的密文中的英文本母全部都是小寫的,因此我們可以把它們全部轉為大寫,然後再進行一次md5運算。

<?php

function 

md5_4

($data

)?>

變換五:字串次序干涉

把md5運算後的密文字串的順序調轉後,再進行一次md5運算。

<?php

function 

md5_5

($data

)?>

Linux下MD5演算法使用

出處 我們以乙個字串為例,新建乙個檔案filename.txt,在檔案內寫入hello 然後在linux下可以使用命令md5sum filename.txt計算md5值 b1946ac92492d2347c6235b4d2611184 雖然寫入的是hello這5個字元,但是我們使用命令xxd fil...

C 使用MD5等雜湊演算法

在對密碼等敏感資訊進行網路傳輸和儲存時,往往不直接儲存其原本值,而是在伺服器端資料庫儲存其雜湊值,比較常用的有如md5,sha1等等。而客戶端則需要將用於輸入的明文密碼轉換為md5 或其他雜湊演算法 雜湊值後再傳輸給伺服器。客戶端對md5加密的程式如下 1.首先引用命名空間system.securi...

win10應用 UWP 使用MD5演算法

windows有自帶的演算法來計算md5 原本在wpf是 private string get md5 string str return strb.tostring tolower 進行md5,可是uwp沒有system.security.cryptography.md5cryptoservice...