回答
當然可以。只需將鹽添加到現有散列並再次散列即可。當然,這將需要任何未來的登錄經歷相同的過程,這意味着需要調用兩個哈希函數,但無論如何,許多合法模式都會這樣做,因此它不會像您想象的那麼糟糕。
醃製密碼是爲了防禦彩虹桌。在這種情況下,鹽不需要是祕密。
http://en.wikipedia.org/wiki/Rainbow_tables#Defense_against_rainbow_tables
實際上,你可以看到這篇文章
hash = MD5 (MD5 (password) . salt)
這是你將使用完全相同的方法Standard。 (除不同的散列函數。)
+1 - 我喜歡這個比我想象的更好 – 2009-07-29 17:07:37
有趣的想法。不過,你確定它不會妨礙安全嗎?特別是這樣,一個人在第二次散列之後獲得字符串將會獲得大量關於前一步驟的信息(例如恆定長度),這可能允許他幫助他找到鹽。 – 2009-07-29 17:09:11
鹽不是祕密。實際上,您需要將它們(以純文本形式)與每個用戶一起保存。 – 2009-07-29 17:10:27
你可以添加一個列,其由表示用戶是否具有舊(無鹽)的標誌或一個新(鹽)散列的。
一個好主意是,在這一點上,以強制所有用戶在註冊時更改他們的密碼,這樣你就可以擺脫該列的最後。
作爲速戰速決,你可以在數據庫中創建一個鹽柱,當用戶登錄正確的匹配舊散列,然後你可以使用該密碼,他們與鹽進入,並創建一個新的哈希值。
有some ways here可能適合你。請記住,您添加到現有哈希中的任何常量模式都是無用的(該鏈接上的其中一個技巧就是暗示類似的東西)。應該沒有可用於分離鹽的可識別模式。
當然,最好的方法是遷移到鹽味散列表。
與類型的創建在你指定的數據庫「鹹魚」的新領域真/假(或其他等值是在你的DBMS)。將現有散列的所有值設置爲false。每當添加一個新的鹽漬散列時,將「鹹」字段設置爲true。
然後,所有你需要做的是處理兩類散列在不同的代碼。
這是比特定的更通用的解決方案,但它應該可以解決您的問題。
如果要存儲的哈希裏面的鹽,它應該是相當簡單的,以確定是否鹽是通過檢查散列的長度包括在內。如果沒有鹽,只需輸入密碼,如果有鹽,則輸入密碼+鹽。
你不應該在你的數據庫中需要一個布爾列。
我存儲我的鹽,最好的辦法是,我嵌入我剛纔所創建的密碼哈希+鹽中的鹽值。我不會將salt字符串附加到散列的開始或結尾,我會將salt嵌入到散列中。
我處理了涉及多個散列技術的類似問題。我使用了在數據庫中編碼散列方法類型的方法(即'alpha','beta','gamma','delta')。我用適當的級別標記了所有當前的哈希值。隨着用戶登錄,我驗證了他們的密碼並使用更新的方法重新對他們進行了散列處理。我們的密碼在90天后過期,所以只需要等3個月,直到所有使用舊方法的密碼都可以重置爲止。
- 1. ASP.NET的密碼哈希和密碼鹽
- 2. 鹽漬密碼哈希不保存鹽
- 3. 在SQL Server中鹽的哈希密碼
- 4. 密碼的非隨機鹽哈希
- 5. 使用現有密碼哈希和鹽創建HMAC
- 6. 用隨機鹽改善密碼哈希
- 7. 哈希和鹽漬密碼字段
- 8. C#哈希密碼創建鹽問題
- 9. 在數據庫中存儲密碼哈希的未加密鹽
- 10. 你如何在openLDAP中啓用密碼哈希(SSHA)
- 11. 你能解密Java中ASP.NET的哈希密碼嗎?
- 12. 加密在登錄時比較哈希和鹽漬密碼
- 13. 你如何在Clojure的這個哈希表中添加?
- 14. 加密哈希密碼?
- 15. MVC - 如何哈希和鹽
- 16. PingFederate - 如何驗證鹽漬MD5哈希密碼?
- 17. 我如何創建隨機鹽哈希加密與
- 18. 你應該如何組合類成員的哈希碼?
- 19. PHP如果你的會話密碼
- 20. 密碼散列,鹽值和哈希值的存儲
- 21. Symfony是從哈希衍生鹽還是不是哈希鹽?
- 22. 值得加密密碼哈希值嗎?
- 23. 我的朋友使用SHA512算法無密碼哈希密碼。我如何說服他說他需要加鹽?
- 24. CakePHP哈希密碼
- 25. Windows哈希密碼
- 26. 哈希和鹽漬密碼並不總是相同
- 27. 如何加密的純文本格式的MD5哈希密碼
- 28. 「動態鹽」哈希如何工作?
- 29. 忘記密碼沒有更新加密碼哈希
- 30. 如何將新密鑰添加到json哈希數組中?
你實際上是哈希密碼,還是更復雜的東西?由於編碼錯誤,我使用了類似的工具 - 但原始代碼有效地散列了「1」+ loginname +「」+密碼 - 這足以使彩虹表變得不可行(尤其是因爲登錄名不是用戶自定義的)選擇)。 – 2009-07-29 17:42:26
我直接將密碼散列。看起來你已經添加了鹽。你的方式似乎很好,因爲除了鹽之外,相同的密碼將不會具有相同的散列,因爲您正在添加登錄名。 – 2009-07-29 17:46:38