2010-10-26 206 views
5

我想爲我的網站實現一個忘記密碼功能。我使用sha1對密碼進行哈希處理。我將如何恢復這個用戶?密碼恢復與sha1密碼散列

實施這個的最佳方法是什麼?

+1

dupe:http://stackoverflow.com/questions/3615408/php-dehashing-the-密碼等 – Anon 2010-10-26 17:16:44

+0

[PHP:如何在用戶點擊忘記密碼時將原密碼發送給用戶通過使用md5?](http://stackoverflow.com/questions/2780198/phphow-to-send-the-original-password-to-the-user-when-he-clicks-forgot-password) – meagar 2010-10-26 17:23:02

回答

29

簡短的回答,你不能。

您要執行密碼重置函數,而不是密碼檢索函數。散列密碼的重點在於您無法存儲用戶的密碼,如果丟失,則無法恢復。

This應該給你如何讓用戶重置忘記的密碼一個粗略的想法:

+6

不僅他不能這樣做。更確切地說,他不應該能夠做到這一點。否則散列根據定義將是無用的。 – ITroubs 2010-10-26 17:17:06

+2

織補。我應該去了簡短的回答:) – 2010-10-26 17:18:15

+0

謝謝你。所以,重置密碼是有道理的。謝謝! – BigMike 2010-10-26 22:55:44

8

最好的方法是不要嘗試恢復原始密碼。如果用戶丟失密碼,則生成一個新的隨機密碼,並使用帶外方法將其發送給他們(例如電子郵件)。請記住,密碼散列的整個目的是防止恢復。

我知道,我知道,電子郵件是不安全的。但是,如果您要求用戶立即更改生成的密碼,那麼風險將得到緩解。順便說一句,我不能推薦足夠的,你也可以提供密碼並迭代散列,以防止攻擊者獲得散列值時發生暴力攻擊。

3

NO

有一個恢復SHA1哈希它沒有已知的有效方法是原文(因爲它是通過設計一個單向函數)。如果您希望稍後能夠向用戶顯示其密碼,您將將其存儲在可逆的方法(IE加密,明文)中。這仍然可能是一個壞主意,試圖找到一個better way of doing it

+0

什麼是回覆sha1哈希的無效方法? :) – 2010-10-26 17:22:11

+0

@George Rainbow Tables可以在簡單的簡單密碼上運行得很好,但是如果哈希值是鹽或包含符號,那麼您可能無法將其反轉。 – 2010-10-26 17:23:49

+0

@喬治 - 蠻力:) – Ishtar 2010-10-26 17:24:45