作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为.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);
}
System.Text.Encoding.ASCII
的两个引用都更改为
System.Text.Encoding.Unicode
,哈希算法可能会生成一些字节组合,这些字节组合不会形成有效的Unicode字符和GetString调用会吓坏了。
最佳答案
您不应该使用任何常规编码将任意二进制数据转换回字符串。它不是编码的文本-只是一个字节序列。不要试图将其解释为“普通”文本。原始密码是否包含任何非ASCII字符都与此无关-您当前的代码已损坏。 (仅在此基础上,我就会对链接的文章产生极大的怀疑。)
我会建议:
Encoding.UTF8
从密码中获取字节。这将允许密码包含任何unicode字符。 Encoding.Unicode
在这里也可以。 Convert.ToBase64String
将计算的哈希值转换回文本。 Base64是专门设计用来在ASCII字符集内的文本中表示不透明二进制数据的。 关于.net - 散列Unicode密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196027/
我是一名优秀的程序员,十分优秀!