如果我使用下面的方法使用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;
}
答案 0 :(得分:13)
UnicodeEncoding
是UTF-16,保证将所有字符膨胀为2到4个字节以表示其Unicode代码点(另请参阅MSDN上的“备注”部分)。
使用(静态)Encoding.UTF8
代替,因此大多数字符都适合一个字节。这取决于您需要模拟哪个系统是否适用于所有字符串。