2012-08-29 46 views
2

我目前正在使用MD5和SHA1將我的用戶密碼保存在數據庫中,但我不知道如何以純文本的形式將它們還原。我試圖回滾用於加密密碼的相同代碼,但它給我一個錯誤。我使用的是加密的密碼如何使用php解密哈希密碼?

代碼:

$hashedpassword = md5(md5(sha1(sha1(md5($normalpassword))))); 

我試圖做同樣的事情類似下面的

$normalpassword = md5(md5(sha1(sha1(md5($hashedpassword))))); 

然後,我意識到這是一些有趣的事:(!!請大家幫幫我...

+10

哈希值是一種方式,你永遠無法恢復它,唯一的辦法就是使用蠻力攻擊! – Hawili

+0

您不以這種方式保護密碼。這會導致過多的開銷,即使輸入相同,結果也可能不同。 –

+3

@MarkGarcia在地球上它有什麼不同的結果? – Tibor

回答

15

MD5和SHA-1是單向散列函數,這意味着您無法從散列值中取回原始字符串。

+8

行..我明白了!所以我需要在每次登錄時檢查用戶密碼,並檢查用戶輸入的散列密碼是否與數據庫中的密碼匹配... oky謝謝.. –

4

你不能。哈希是一種方法,您必須在登錄表單上生成新的輸入哈希,並檢查它是否與存儲的哈希相等。

+0

謝謝!我知道了...... –

2

爲什麼你要加密他們,如果你最終希望他們回來?散列的使用恰恰是因爲無法以明文形式獲取密碼。

如果您想要它們,請使用對稱密碼。

+0

我正在爲我的腳本設計一個Facebook Connect記錄系統,所以我無法更改密碼加密的原始代碼..我的想法是將它們取回並執行某些操作...無論如何thnx .. –

3

散列不加密。

像MD5和SHA1這樣的散列函數是不能顛倒的,它只能被驗證。這通常是使用散列函數的要點,因爲攻擊者無法使用散列檢索清除密碼(其他攻擊,如使用彩虹表)。

更多細節可以在這裏找到:http://en.wikipedia.org/wiki/Cryptographic_hash_function

如果要散列密碼存儲在數據庫中,看看PHPass。對於PHP來說,這是一個很好的類,可以像目前可能的那樣對密碼進行散列和驗證,並且廣泛用於基於現代php的Web應用程序。

+0

Yeh ..我知道了...我會跟着。 –