2010-10-14 51 views
0

我需要接收用戶的電子郵件地址,並以某種方式操作該值以提供自動生成的密碼。我想確保當用戶需要檢索密碼時,我可以重新創建相同的密碼。什麼是從一個值創建「密鑰」的標準方式?

有沒有這樣做的標準方式?這是什麼「哈希」?如果有人能指引我走向正確的方向,我將非常感激! :)一旦我知道在哪裏看,我可以自己做研究。

謝謝!

陽光

回答

3

是的,這就是「散列」。但是,我強烈建議不要這種方法,因爲這意味着擅長進行加密分析的人只要知道他們的電子郵件地址,就可能爲系統上的任何用戶生成密碼。

在您建議的情況下,標準做法是在忘記密碼時使用新的隨機密碼實際重置用戶密碼。這使他們以前的密碼保持「安全」,以便有人碰巧用他們的密碼攔截電子郵件,它將只包含一個隨機密碼,而不是用戶可能用於登錄到其他每個網站的密碼。

密碼重置後,用戶應鼓勵更改其密碼時,他們首先登錄。

1

散列函數並做你要找什麼 - 它需要一些輸入x和生成摘要d這將是相同的,只要你給它重新輸入X。

一個better definition from wikipedia,解釋這個屬性:

確定性

散列過程必須是確定的,這意味着對於一個給定的輸入值,它必須產生相同的散列值。換句話說,從術語的數學意義上講,它必須是散列數據的函數。該要求不包括取決於外部變量參數的散列函數,例如取決於一天中的時間的僞隨機數生成器。如果該地址可能在處理過程中發生更改(可能會發生在使用某些垃圾收集方法的系統中),但它也會排除依賴於被哈希對象的內存地址的函數,儘管有時可以對項目進行重新哈希處理。

但是,如果這是密碼檢索,我會建議反對它。相反,我會推薦給他們發送鏈接以重置密碼的方法,然後讓他們重置密碼。

1

如果你正在做某種形式的密碼重置系統,您應該只是隨機生成密碼以他們的電子郵件和比強制他們在初次登錄時更改它。如果他們需要在其他時間重置密碼,則可能會再次通過相同的過程。

1

類似於PHP中的md5函數將是一個很好的開始。但是,如果用戶丟失了,爲什麼還需要重新創建相同的自動生成的密碼?就個人而言,生成一個新的隨機數據更有意義。

1

哈希就像一個指紋。如果您有原始值(例如密碼),則可以獲取指紋並與數據庫中的指紋進行比較。但是使用數據庫中的指紋,您無法重新創建原始值(您無法從指紋創建人體)。

這似乎是你想要的。但即使如此,它可能不是你所需要的。通過電子郵件地址的散列生成密碼意味着任何知道如何散列電子郵件地址的人都可能知道每個密碼。

如果您正在尋找密碼恢復系統,則應改爲使用Self-service password reset系統。

  1. 的用戶說,他忘記了密碼,
  2. 您可以通過一個安全的平均發送一個唯一的密鑰(您在數據庫存儲)到該用戶(通常是郵件)。
  3. 用戶通過提供以前使用的唯一密鑰來確認他忘記了密碼。這樣你就可以確定用戶是所有者。
  4. 您將生成一個完全隨機的密碼,並將其存儲在散列表中,並通過以前使用的安全方式將其發送給所有者。
相關問題