我已经按照这篇文章介绍了如何实现密码哈希和salting http://www.codeproject.com/Articles/608860/A-Beginners-Tutorial-for-Understanding-and-Impleme
我已将本文中提到的所有代码实施到我的 MVC 5 Web应用程序中,但是,每当我存储PasswordHash和Salt 时,这两个字符串都会保存在我的用户表为问号,例如,????????????????
我正在使用的数据库是 Sql Server 2008 R2 。我的数据库User表中的两个字段都有数据类型为Nvarchar(100)
我还应该提到使用 Entity Framework 5 将数据保存到数据库中。
有没有人见过这个?我认为它可能是一个数据类型问题,即不应该是Nvarchar,但是,我真的不知道。
任何帮助都会很棒。
感谢。
答案 0 :(得分:1)
Utility.cs
中存在问题:
public static string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
该函数以随机字节为单位。这不是您创建随机字符串的方式。字符不是用于存储二进制数据。对于许多组件来说,这些弦很难被吞下。
使用Convert.ToBase64String
并且不信任网络上的随机文章。在使用之前,请根据您的理解验证您所发现的内容。
答案 1 :(得分:1)
SHA256不是字符串,是字节数组。在客户端代码中使用byte [],在服务器代码上使用VARBINARY
。