如何散列密碼?
回答
一個非常簡單的過程真正做到:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample);
using(SHA512 sha512 = new SHA512Managed())
{
byte[] hash = sha512.ComputeHash(data); // Add Per User Salt as per the Below
}
hash
現在包含你想要散列初始數據的非可逆式哈希值。另外,請查看MSDN。有幾個注意事項:(時間越長越好,並且每個用戶獨特的 - 感謝保羅,好點)
downvote上的任何詞?謝謝。 – 2010-05-11 19:51:30
+1,不過值得一提的是,salt應該是唯一的密碼。也許改變你的例子包括鹽 – PaulG 2010-05-11 19:54:03
@保羅 - 好一點,添加它 – 2010-05-11 19:55:05
C#示例:
byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA512 shaM = new SHA512Managed();
result = shaM.ComputeHash(data);
-1用於使用快速的普通SHA-512。使用慢鍵推導函數,如PBKDF2,bcrypt或scrypt。 – CodesInChaos 2012-05-11 21:29:11
您應該使用bcrypt,這是比密碼SHA512更安全。
如果您確實需要使用SHA512,則應該使用SHA512Managed
class,正如其他答案所述。
一定要鹽你的散列。
如何散列密碼?
用鹽。真。
永遠,永遠做此:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample);
但這:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample + salt);
這是一個最容易被誤解 「訣竅」。大多數人不知道什麼是「鹽」,當你向他們解釋時,他們認爲這毫無意義。
事實是:SHA-512或MD5或一些非常弱的散列,一旦彩虹表被預先計算,沒有任何區別。 SHA-65536,如果它存在(我在這裏很諷刺),一旦預先計算彩虹表,它將比任何其他哈希算法都好。
一個足夠大的「鹽」,使彩虹表是不可能的:
http://en.wikipedia.org/wiki/Rainbow_table
請注意,即使你完全明白哈希,鹽和彩虹表是如何關聯(因此明白爲什麼維基百科的文章指出:「鹽經常與哈希密碼一起使用,使這種攻擊更加困難,通常不可行。」)你的同事不可能有很高的可能性。就像很可能大多數人在這個主題中起伏,都不理解這個話題。
我在這裏看到了30個upvotes的答案,這裏有人不明白什麼是鹽,不斷用techno-buzzwords來保衛自己的位置......然而他擁有所有這些upvotes(太懶惰找到問題,但它是史詩)。
你應該使用'RNGCryptoServiceProvider'以創建爲每個新的散列鹽,並同時存儲哈希和鹽。 – Will 2010-05-11 19:55:05
僅靠鹽是不夠的。散列函數也應該很慢。使用PBKDF2,bcrypt或scrypt。 – CodesInChaos 2012-05-11 21:29:56
- 1. 如何散列密碼
- 2. 散列密碼
- 3. 散列密碼
- 4. 密碼散列
- 5. 散列密碼
- 6. 散列密碼
- 7. password_verify - 密碼散列
- 8. 散列密碼,SQL
- 9. PHP:密碼散列
- 10. 散列密碼的加密?
- 11. 加密與散列密碼
- 12. 解密散列密碼
- 13. 如何用隨機鹽散列密碼?
- 14. Asp.net MVC - 如何散列密碼
- 15. 如何用SHA512散列密碼
- 16. 如何加鹽和散列密碼
- 17. bootstrap-table密碼列散列
- 18. 如何在java中使用散列函數來散列密碼?
- 19. 密碼恢復與sha1密碼散列
- 20. 如何比較散列密碼與普通密碼?
- 21. 如何比較密碼與鹽漬散列密碼
- 22. 如何根據MediaWiki用戶表驗證密碼散列密碼?
- 23. 散列密碼不匹配
- 24. 在cookies中散列密碼
- 25. 訪問散列密碼
- 26. PBKDF2 PHP的密碼散列
- 27. 密碼SHA散列登錄
- 28. 散列密碼不匹配
- 29. 密碼salting /散列與bcrypt
- 30. 多重密碼散列
不要。給安全專家留下密碼加密。你會弄錯它,然後你會危害你的組織。聘請專家;這比成功攻擊你不知道你加入到你的安全系統的弱點成功後的清理成本要便宜得多。 – 2010-05-11 19:44:50
聘請專家取決於您的風險等級。如果你正在儲存大衆的私人信息,並且這個密碼是阻礙你的,那麼是找一個專家。下面列出的大多數例子都足以滿足您的平均非保密信息項目的需求。 – 2010-05-11 20:02:12
@Eric - 我假設你的意思是「在.NET中使用SHA512的實現而不是創建你自己的」,而不是「使用.NET中實現的成員提供程序來提高安全性」。我可以看到兩者都有一定的合理性,但是當我同意前者時,我可以看到一些後者不可行的情況。事實上,我從來沒有想到有人會考慮實現他們自己的SHA-512版本 - 因此你的評論讓我感到困惑了一下,你是否應該將應用中的安全性委託給更合格的人。 :-) – tvanfosson 2010-05-11 20:07:24