我看到這個問題Encrypting/Hashing plain text passwords in database有沒有內置函數來在.NET中哈希密碼?
我知道我不應該做md5(「鹽」+密碼);我在python中看到了一個解決方案的實現。
是否有一個.NET內置函數與參數我可以使用,而不是寫我自己的?
我看到這個問題Encrypting/Hashing plain text passwords in database有沒有內置函數來在.NET中哈希密碼?
我知道我不應該做md5(「鹽」+密碼);我在python中看到了一個解決方案的實現。
是否有一個.NET內置函數與參數我可以使用,而不是寫我自己的?
退房FormsAuthentication.HashPasswordForStoringInConfigFile
string hashMD5 = FormsAuthentication.HashPasswordForStoringInConfigFile(Pass + Salt, "MD5");
string hashSHA1 = FormsAuthentication.HashPasswordForStoringInConfigFile(Pass + Salt, "SHA1");
我不認爲有一個單一的功能,但你可以在幾行做到這一點(這裏使用SHA512,但也有其他選項):
using (var sha = new SHA512CryptoServiceProvider())
{
byte[] hashed = sha.ComputeHash(Encoding.Default.GetBytes(saltedPassword));
string output = Convert.ToBase64String(hashed);
}
確保您使用的加密之一。 ..類以確保使用更安全的算法。
很糟糕的計劃。沒有鹽的散列會受到彩虹表攻擊。你使用加密類很好,但你必須包含一個鹽來使這個答案有用。另外,最後一行應該使用'Convert.ToBase64String',它與'BitConverter.ToString'一樣快,併產生一個更短的字符串(在這種情況下爲88字節vs 192字節)。如果這兩個問題得到糾正,這可能會成爲最好的答案,恕我直言。 – 2010-01-23 04:33:17
謝謝您的澄清。是的,顯然密碼應該在哈希之前被醃製,我想在這裏看到,但是我看到混淆來自哪裏。我會更新以更明確。感謝您提及Base64String轉換。 – 2010-01-23 14:59:51
請不要使用任何哈希函數的單個傳遞,無論它是多麼好的函數。使用已知擅長密碼散列的方法 - SCrypt,BCrypt或PBKDF2(如.NET的RFC2898DeriveBytes)。雖然SHA-512是一種很好的加密散列函數,但由於2014年復古GPU上的64位操作性能較差,即使存在嚴重缺點,在單個8x電腦上的[oclHashcat](http://hashcat.net/oclhashcat/) AMD R9 290Xstock核心時鐘仍然可以嘗試每秒7.97億次猜測或每月2E15次猜測。 – 2014-03-29 01:45:37
不,你不應該使用MD5密碼散列!!!!!
不好!!!!!您也不應該通過單個哈希傳遞(md5或其他)執行salt +密碼!壞!!!!
也不應該做鹽+哈希密碼多次(每PBKDF2 unles XOR每個散列通的!壞!!!!
使用此API:https://sourceforge.net/projects/pwdtknet好!!!!!
是的,.NET Framework 2.0及更高版本(現在包括4.5版本)在一個名爲Rfc2898DeriveBytes的類中實現了PBKDF2(也稱爲RFC2898和PKCS#5v2),從技術上講它實現了PBKDF2-HMAC-SHA-1,與PBKDF2-HMAC-SHA-512一樣好,對於密碼散列仍然合理。
PBKDF2參數:
注意HMACSHA512 versus Rfc2898DeriveBytes for password hash包含我還沒有詳細地分析某些示例.NET代碼,但也可以是一個有用的起點。
關於它如何比「FormsAuthentication.HashPasswordForStoringInConfigFile」更好/更差的評論? – 2014-02-25 03:38:15
RFC2898要好得多,即使有1個虛擬迭代計數 - 在成千上萬的合理迭代計數下,成倍提高數萬倍!他們從微軟自己的[注意:這個API現在已經過時。](http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.hashpasswordforstoringinconfigfile(v = vs.110).aspx )並繼續完成「這只是(幾乎可以肯定)沒有影響的MD5或SHA-1!不要這樣做!!!」基於[代替FormsAuthentication.HashPasswordForStoringInConfigFile?](https://stackoverflow.com/q/13527277/1967612) – 2014-02-25 03:44:20
此API現在已過時。 – 2014-02-25 08:55:10