这是我的小助手方法从字符串中获取哈希值。但我得到某种奇怪的文本而不是哈希值:
public static string GetHashValue(string sourceString)
{
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
return Encoding.UTF8.GetString(provider.ComputeHash(Encoding.UTF8.GetBytes(sourceString)));
}
我不认为我从这个函数得到的值实际上是一个哈希值。
提前致谢:)
答案 0 :(得分:2)
使用UTF8.GetString()在这里没有意义,散列函数不返回以utf-8编码的字符串。它只是一个带有任意字节值的byte []。请改用Convert.ToBase64String()。它仍然是gobbledygook但它应该是。它是哈希。您可以使用Convert.FromBase64String()将其往返于byte []。
答案 1 :(得分:1)
您可能希望将其显示为十六进制字符串。这是一种常见的表现方式,与您现在显示的内容有所不同。有关详细信息,请参阅the MSDN sample。
尝试对代码进行以下更改(改编自上面的示例):
public static string GetHashValue(string sourceString)
{
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider()
byte[] hashData = provider.ComputeHash(Encoding.UTF8.GetBytes(sourceString));
int i;
StringBuilder sOutput = new StringBuilder(hashData.Length);
for (i=0; i < hashData.Length; ++i)
{
sOutput.Append(hashData[i].ToString("X2"));
}
return sOutput.ToString();
}