2013-02-25 80 views
3

在測試我們的應用程序時,發現如果用戶忘記密碼,則沒有功能進入應用程序。恢復密碼生成

在發現這個時,我們實現瞭如下的密碼生成技術 1.使用用戶信息創建一個特定的字符串。 2.在字符串上應用SHA1 3.將SHA1哈希的一部分作爲密碼

上面的算法應用於服務器端和設備端。所以他們不需要有任何交互。所以如果用戶忘記密碼,他可以請求服務器。服務器像上面那樣運行算法並將生成的密碼發送給用戶的電子郵件。在設備端,使用相同的alto生成相同的密碼。所以當用戶輸入時,它匹配並且用戶被授予訪問權限。

不知何故,我不滿意這個,因爲我們使用相同的字符串來生成密碼。所以每次用戶忘記密碼並生成密碼,他都會得到相同的密碼,而不是密碼生成器的工作方式。

所以我想增加一些更多的字符串,這將是可變的,但將在服務器和設備端相同。其中一種選擇是在字符串中使用日期,但如果服務器位於不同的時區設備中,並且服務器將生成不同的密碼。

有沒有更好的解決方案呢?請建議...

+0

該算法違反了[Kerckoffs原則](http://en.wikipedia.org/wiki/Kerckhoffs's_principle)。雖然不是直接等價,但我相信它適用。實質上,任何加密方法(或者在這種情況下密碼存儲)都不應該依賴祕密的算法來保證安全。如果我知道算法,那麼我可以嘗試計算用戶的密碼。 – mjshaw 2013-02-25 07:49:42

+0

可以請你提供一些解決方案嗎? – Sagrian 2013-02-25 09:38:38

回答

1

聽起來像你想要使用「基於哈希的消息認證碼」(HMAC)。這背後的想法是,即使在純文本連接中,用戶的密碼也不可見,因爲用戶名,密碼和服務器生成的「會話密鑰」被用於生成隨會話密鑰更改而改變的散列。鑑於哈希是單向的,從網絡連接發送的哈希中導出用戶密碼是不可能的。

陽光下沒有什麼新鮮事。

+0

沒有遵循很多:(你可以試着用不同的詞來表達嗎?我也經歷了你給出的鏈接,但它似乎也會一直生成相同的密碼。 – Sagrian 2013-02-25 09:35:18