我目前正在研究Visual Studio C#窗體項目。然而,我對SHA256 +鹽漬工程的感受很困惑。我在網上找到了一些示例,但無法理解如何調用此函數。如何創建一個SHA256哈希鹽?
我想以連接到數據庫的登錄表單(Microsoft Access 2010)調用此函數。
- 如何通過一個按鈕的點擊來自
Textbox
閱讀 密碼調用這個函數? - 我如何顯示散列值在
Messagebox.Show
方法? (爲了我的測試目的) 是否可以通過 比較兩個文本(散列和醃製)並給出肯定的結果?
public static string sha256encrypt(string phrase, string UserName) { string salt = CreateSalt(UserName); string saltAndPwd = String.Concat(phrase, salt); UTF8Encoding encoder = new UTF8Encoding(); SHA256Managed sha256hasher = new SHA256Managed(); byte[] hashedDataBytes = sha256hasher.ComputeHash(encoder.GetBytes(saltAndPwd)); string hashedPwd = String.Concat(byteArrayToString(hashedDataBytes), salt); return hashedPwd; } public static string byteArrayToString(byte[] inputArray) { StringBuilder output = new StringBuilder(""); for (int i = 0; i < inputArray.Length; i++) { output.Append(inputArray[i].ToString("X2")); } return output.ToString(); } private static string CreateSalt(string UserName) { string username = UserName; byte[] userBytes; string salt; userBytes = ASCIIEncoding.ASCII.GetBytes(username); long XORED = 0x00; foreach (int x in userBytes) XORED = XORED^x; Random rand = new Random(Convert.ToInt32(XORED)); salt = rand.Next().ToString(); salt += rand.Next().ToString(); salt += rand.Next().ToString(); salt += rand.Next().ToString(); return salt; }
如何創建與鹽的SHA256哈希?
shavalue = (sha256encrypt("password", "username");
saltedandhashtext = CreateSalt(shavalue);
我不知道如果我相信這段代碼沒有閱讀*和理解*它,因爲它調用SHA-256「加密」,只有使用多達256個不同的鹽值... –
我不會浪費任何時間讓這些代碼工作。扔出去,並從新的代碼開始。特別是使用'Rfc2898DeriveBytes',它使用拉伸散列函數,並且可以自己創建一個鹽。 – CodesInChaos
由於您在哈希密碼,因此您應該考慮在CSharp中使用像PBKDF2這樣的慢密鑰派生函數,它可以使用[Rfc2898DeriveBytes](http://msdn.microsoft.com/zh-cn/library/system .security.cryptography.rfc2898derivebytes%28v = vs.100%29)class,正如CodesInChaos已經提到的那樣。 – martinstoeckli