2012-06-20 152 views
2

我最近看了一篇關於password hashing的文章。爲什麼MD5/SHA1密碼哈希無法解密?

如何創建MD5或SHA1哈希以使其無法解密?我認爲,它必須通過某些FORMULA來加密字符串(它總是給同一個字符串使用相同的散列;所以不能有隨機化),這就是爲什麼我們應該能夠用相同的FORMULA解密它?或者人們不知道論壇?

+0

由逆公式。我離密碼學專家很遠,但其思想是你有兩個功能:可以在合理時間內計算的加密(明文)和解密(密文),這至少不能沒有密鑰。通常你可以做的最好的事情是通過加密函數運行所有的明文,直到你找到正確的。這需要指數時間,並由此導致方法的安全性。 –

+3

@PanayiotisKarabassis MD5和SHA1不是加密算法,不能解密。他們是哈希函數。您的評論有點誤導。 – psych

+0

確實。對不起... –

回答

27

MD5和SHA1不是加密算法。他們是哈希算法。它是單向公式。對特定字符串運行MD5或SHA1會產生始終相同的散列。不可能將函數反轉回原始字符串。

例如:

15國防部4 = 3

即使你知道公式是

在x mod 4

你不能推斷x,因爲它可能是3,7,11,15等...

顯然,MD5和SHA1要複雜得多!

在上面的例子中,輸入15總是會給你3的答案,但是沒有人能夠推導出原始數字。這不會導致很好的碰撞,其中多個輸入字符串可以給相同的哈希:

http://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities

維基百科所使用的特定算法的信息:

http://en.wikipedia.org/wiki/MD5#Algorithm

+0

好吧,那有道理... –

+0

謝謝!這是我正在尋找的那種例子! – Gabo

4

一切都是正確的鬥志解釋,我想補充一點:

15 Mod 4 = 3

即使你知道公式是

在x mod 4

你不能推斷出X,因爲它可能是3,7,11,15等

我們可以去連更接近我們的情況,並有行動的結果(如你有哈希值作爲動作和動作描寫的結果)

在x mod 4 = 3

x可以是12,13,14或15,它不會告訴我們輸入了什麼樣的整數。

+0

但是用這個公式找到與輸出相匹配的輸入很簡單。因此找到第一個原像很簡單。密碼散列的一個重要屬性是,您無法找到與給定輸出匹配的任何輸入。 – CodesInChaos

0

我一直認爲md5和sha1不能被解密,並在我的應用程序中使用。但令我驚訝的是,我發現了一些執行該程序的網站。 見http://www.crypt-security.com/ 因此,這個程序是不夠安全的

+0

這是一個相當古老的問題,並沒有真正回答這個問題......感謝您加入stackoverflow,我希望你堅持下去,找到有用的網站。 – jeremy

+1

MD5和SHA1不能被解密,因爲它們不是加密算法。他們是哈希函數。雖然逆向工程並不容易,但沒有任何東西可以阻止我查找MD5('password')= 5f4dcc3b5aa765d61d8327deb882cf99並將散列值存儲在字典中,以便我可以執行查找來識別輸入字符串是'password' 。 – psych

+1

還有很多其他方法可以確定這些常見散列函數的匹配情況,但「解密」這個詞的使用是不正確和誤導的。 – psych