Sql Server将SHA256字符串存储为问号

时间:2014-02-04 11:47:19

标签: sql-server-2008 entity-framework encryption sha

我已经按照这篇文章介绍了如何实现密码哈希和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,但是,我真的不知道。

任何帮助都会很棒。

感谢。

2 个答案:

答案 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