public string ComputeSaltedHash(string password, byte[] salt) {
// Get password ASCII text as bytes:
byte[] passwordBytes = System.Text.Encoding.ASCII.GetBytes(password);
// Append the two arrays
byte[] toHash = new byte[passwordBytes.Length + salt.Length];
Array.Copy(passwordBytes, 0, toHash, 0, passwordBytes.Length);
Array.Copy(salt, 0, toHash, passwordBytes.Length, salt.Length);
byte[] computedHash = SHA1.Create().ComputeHash(toHash);
// Return as an ASCII string
return System.Text.Encoding.ASCII.GetString(computedHash);
}
然而,我希望允许用户在密码中使用Unicode字符,如果他们愿意的话。(这似乎是一个好主意;有人能想到不允许的原因吗?)
然而,我对Unicode的工作方式并不是很了解,我担心如果我只是将System.Text.Encoding.ASCII
的两个引用都更改为System.Text.Encoding.Unicode
,哈希算法可能会产生一些无法形成有效Unicode字符的字节组合,从而使GetString调用出现问题。
这是一个有效的担忧吗,还是没事?