2010-12-13 190 views
5

我有md5格式的密碼數據庫項,但是當用戶使用「忘記密碼」時,我該如何給他/她所需的密碼?我有md5加密密碼,當他使用「忘記密碼」時如何給用戶提供密碼?

+1

Oblig。 nitpick:MD5函數是* hashing * - 信息從結果中丟失,原始數據不可恢復。使用*加密* OTOH,可以使用正確的密鑰完全恢復原始數據。 – Piskvor 2010-12-13 11:49:24

+0

可能重複[是否可以解密md5哈希?](http://stackoverflow.com/questions/1240852/is-it-possible-to-decrypt-md5-hashes) – 2013-01-07 23:26:34

回答

12

你不能從MD5哈希中做到這一點;你也不應該能夠。密碼恢復應該是棘手的。

通常的過程是發送一個密碼重置令牌(URL)到他們的電子郵件地址,以便用戶可以選擇一個新的密碼。

+0

謝謝@Marcelo Cantos – 2011-11-17 09:51:35

2

如果不將密碼放在數據庫中,這是不可取的,但您可以生成一個新密碼併發送給他們。或者他們可以重置密碼的鏈接。

1

給出密碼的長度,您有1/100的機會恢復該密碼(字典方法)。我不會推薦它。

最好生成一個新的隨機密碼,並將其發送給用戶的電子郵件。

+0

遠遠低於實際上,這就是整個散列點:簡單而快速的一種方法(數據散列),複雜和非常緩慢(正如在「正確完成時幾乎不可能」)在另一個方向(散列到數據)。 – Piskvor 2010-12-13 11:52:40

+0

@Piskvor其實這只是我的估計。 :P它將取決於使用的字典。 – Ruel 2010-12-13 11:53:52

+0

如果您獲得1/100的回收率。你有一個非常不安全的系統。事實上,您可以使用各種md5 de /編碼器測試您自己的系統的恢復速率。拍攝0%的恢復。 http://www.md5decrypter.com/ – DampeS8N 2010-12-13 12:37:01

2

您必須發送new password給用戶,然後再設置到數據庫中。否則原始密碼可能無法恢復。

謝謝。

3

您不能 - MD5僅僅是一種「單向」散列 - 不是加密數據的手段,可以隨後對其進行解密。

因此,總的思路是:

  1. 向用戶發送電子郵件給他們的註冊地址與它重置鏈接。 (以證明他們實際上擁有該地址)。重置鏈接應該包含基於其特定用戶數據的某些方面的散列,因此不容易被猜出等(例如:帳戶創建時間。)

  2. 當用戶點擊鏈接時,他們登錄密碼重置頁面,檢查上面的散列,生成一個新的密碼(理想情況下是上/下和一些數字字符的混合,雖然我總是傾向於忽略字符,如'0',' o','O'等),然後通過電子郵件向用戶發送新密碼,建議他們儘快更改密碼。

用戶可以按照慣例登錄並訪問該網站。

+0

我只是跳過發送新密碼的第二封電子郵件。讓用戶直接從該鏈接更改密碼。 – Danosaure 2010-12-13 16:55:03