微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#中String的SHA256哈希与网站上的哈希不一致

如果我使用下面的方法使用SHA256在C#中散列字符串“password”,我将其作为输出
e201065d0554652615c320c00a1d5bc8edca469d72c2790e24152d0c1e2b6189

但是this website(SHA-256 produces a 256-bit (32-byte) hash value)告诉我的是:

5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

我显然有数据格式问题或类似的问题.有什么想法为什么这个C#SHA256Managed方法返回不同的东西?我发送方法“密码”作为输入参数.

private static string CalculateSHA256Hash(string text)
    {
        UnicodeEncoding UE = new UnicodeEncoding();
        byte[] hashValue;
        byte[] message = UE.GetBytes(text);

        SHA256Managed hashString = new SHA256Managed();
        string hex = "";

        hashValue = hashString.ComputeHash(message);
        foreach (byte x in hashValue)
        {
            hex += String.Format("{0:x2}",x);
        }
        return hex;
    }

解决方法

UnicodeEncoding是UTF-16,保证将所有字符膨胀为2到4个字节以表示其Unicode代码点(另请参阅MSDN上的“备注”部分).

使用(静态)Encoding.UTF8代替,因此大多数字符将适合一个字节.这取决于您需要模拟哪个系统是否适用于所有字符串.

原文地址:https://www.jb51.cc/csharp/98648.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐