2012-04-06 133 views
3

我正在使用md5來加密用戶在我的數據庫中的密碼,並且我希望他們在忘記發送郵件時將密碼恢復。問題是我不知道如何編寫PHP代碼來恢復它。如何從MD5恢復密碼?

任何答案或適當的鏈接將非常感激。 謝謝..

+9

散列,而不是加密,你不能這是使用散列的整個點。標準做法是將它們發送到URL以設置新密碼。 – 2012-04-06 09:03:05

+0

如果你想讓密碼恢復,你爲什麼要把它們放在首位? (注意:我不是建議不用哈希密碼。) – JJJ 2012-04-06 09:07:50

+0

@Dagon,我會投票贊成,如果你給出了答案,以及爲什麼要這樣做的更多解釋 – 2012-04-06 09:08:59

回答

10

這不能做

MD5是hashing function而不是加密功能。這是一個單向過程,不可逆轉。

實際上,有許多這樣的密碼(輸入)散列時,這將導致在相同 MD5值,但它的「硬」找到剛剛一個和[一般]不可能找到原來的一個。這就是「破解」密碼所做的 - 它發現了一個這樣的輸入,即在散列時會產生特定的輸出。 (並且我將不會在這條路上提供更多幫助。)

0

Rainbow tables可能對您有些興趣。
從哈希中恢復原始密碼是不可能的,但使用彩虹表可以找到一些字符串,它會根據需要生成相同的哈希。

+0

請告訴我你負責什麼網站,所以我可以避開它們。 – 2012-04-06 09:12:52

+0

http://gmail.com – 2012-04-06 09:17:31

2

MD5是一個散列函數,你不應該嘗試恢復散列密碼。通常的做法是擦除散列密碼並強制他們從電子郵件中的鏈接設置新密碼。傳遞哈希密碼,然後試圖顛倒它們,是一個嚴重的安全漏洞。

6

如前所述 - MD5像所有散列函數 - 不應該顛倒。也可以這樣做,因爲許多字符串可以被散列到相同的字符串,反之後可以得到不同的字符串。

如果幸運的話,你可以在rainbowtables中找到你的散列表:http://www.md5rainbow.com/ 但它可以給你帶來不是你的原始字符串,儘管它不重要,你可能會比較散列字符串。

你可能想要做的是'重置密碼'而不是發送原始密碼。

2

從理論上講,在大多數情況下,您的用戶會希望向他們發送一個特殊鏈接,這些鏈接在進行一些檢查後會重置密碼,您不應該在郵件中發送純文本密碼,也不應該讓用戶知道您沒有打開您系統中可用的密碼版本。