回答
我們有一個偉大的討論前一陣子的最佳做法醃製密碼的時候,你可能會發現一些偉大的想法有:
Salting Your Password: Best Practices?
我發現,同時仍然一個最簡單的, 相當於安全,就是使用GUID作爲你的鹽。這是隨機的,足夠長的。如果包含GUID的字符串格式('{'和' - '字符),但最好不要。
請記住,鹽每個項目都必須是獨一無二的鹽,爲了最安全起見,您應該使用密碼安全的隨機數生成器。還要記住,你必須存儲你的鹽和密碼,否則你將無法檢查明文版本與散列版本!如果你喜歡,你可以存儲未加密的鹽;我通常把它放在與密碼相同的表格中。鹽的目的不是保持隱藏,而是要使得彩虹表很難(有希望不可能)及時計算。
這裏有一個快速的摘錄,在C#中的工作:
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buffer = new byte[1024];
rng.GetBytes(buffer);
string salt = BitConverter.ToString(buffer);
var saltedPassword = password + salt;
或...
var salt = Guid.NewGuid().ToString();
var saltedPassword = password + salt;
如果您生成隨機鹽,請記住保留它們,因爲您需要它們在出口時解密。 – 2010-06-17 16:00:29
@亞當:好點。我原本有這樣一句話,但顯然已經編輯出來了。我會把它放回去。 – Randolpho 2010-06-17 16:03:27
不用擔心,+1對於一個很好的解釋:) – 2010-06-17 18:07:10
這是nice article和another one(它更適合於ASP.NET應用程序)。
第二條是更好的,因爲它允許任意鹽大小。第一個推薦一個4字節的鹽;絕對的方式來小。鹽應該很長。我不是在批評你,只是把它放在這裏作爲後代。 :) – Randolpho 2010-06-17 15:57:29
有沒有巫術,鹽只是一些隨機的文本附加到密碼來打敗字典攻擊 - 組成你自己的亂碼。
看一看像hmacdm5,hmacsha1或hmacsha256的HMAC功能。
也請看System.Security.Cryptography命名空間。
@downvoter:我想聽聽這個問題... thx – tanascius 2010-06-17 16:08:29
我也是。 :S爲什麼會被低估? – 2010-06-17 16:45:39
可能是因爲它不直接與鹽有關嗎?不確定... – 2010-06-17 19:28:02
我假設你正在與密碼一起詢問用戶名?
在某些系統中,用戶名被用作鹽。 (我認爲這樣做可以。) 否則,你需要將你的鹽存儲在某個地方,並在散列之前檢索它(在隨機創建的鹽的情況下)或者有一個算法將返回相同的鹽同一個用戶(並且使用普通用戶名並不會更好)。
個人使用下面的代碼:
byte[] GetSaltedPasswordHash(string username, string password)
{
byte[] pwdBytes = Encoding.UTF8.GetBytes(password);
// byte[] salt = BitConverter.GetBytes(userId);
byte[] salt = Encoding.UTF8.GetBytes(username);
byte[] saltedPassword = new byte[pwdBytes.Length + salt.Length];
Buffer.BlockCopy(pwdBytes, 0, saltedPassword, 0, pwdBytes.Length);
Buffer.BlockCopy(salt, 0, saltedPassword, pwdBytes.Length, salt.Length);
SHA1 sha = SHA1.Create();
return sha.ComputeHash(saltedPassword);
}
- 1. Django窗體更改密碼
- 2. C++ Windows窗體 - 密碼強度
- 3. 更新密碼的Windows窗體C#
- 4. c#窗體窗體應用程序
- 5. C#窗體窗體應用程序
- 6. 密碼按鈕,用戶窗體
- 7. 如何從java窗體應用程序中爲SQL Server登錄設置密碼
- 8. 如何Console.write()在C#窗體窗體應用程序
- 9. c#窗體窗體應用程序窗體問題
- 10. 調度程序不在C#窗體窗體應用程序
- 11. 在窗體中使用DialogResult窗體應用程序c#
- 12. 如何驗證Spring窗體:窗體的形式:使用JQuery驗證的密碼?
- 13. Owin Windows窗體/重置密碼
- 14. 彈出窗體獲取密碼輸入
- 15. C#窗體窗體應用程序,從子窗體關閉父窗體
- 16. 在C#窗體窗體應用程序中找不到System.Windows.Input.Mouse
- 17. 在visual C++窗體窗體應用程序中瀏覽文件
- 18. 在C++中打開新窗體Windows窗體應用程序
- 19. 在C#窗體窗體應用程序中加載jQuery
- 20. 如何在WPF應用程序中顯示窗體窗體
- 21. 如何在文本框中用***在c#windows窗體中編寫密碼?
- 22. 如何在C#窗口窗體應用程序中VideoBrush?
- 23. 試用窗體窗體應用程序
- 24. C#窗體窗體應用程序,如何在窗體窗體上高效地創建動態面板
- 25. 如何使用窗體窗體應用程序在C++中啓動(.exe)文件?
- 26. 窗體窗體應用程序「查找」
- 27. 刷新窗體窗體應用程序
- 28. 如何在c#窗體窗體應用程序中對齊文本
- 29. 如何在C#窗體中創建無限循環窗體應用程序
- 30. c#窗體中的動態標籤窗體應用程序
可以方便地使用這個http://encrypto.codeplex.com/ – Omu 2010-09-14 08:33:36