【发布时间】:2010-11-16 15:52:04
【问题描述】:
我正在为我的 .NET 应用程序编写密码盐/哈希程序,主要遵循本文的指南: http://www.aspheute.com/english/20040105.asp
计算加盐哈希的代码基本上是这样的:
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 调用会崩溃。
这是一个合理的担忧,还是可以?
【问题讨论】:
标签: .net unicode hash passwords