为什么我得到胡言乱语而不是哈希值?

时间:2011-01-30 19:04:00

标签: c# hash md5

这是我的小助手方法从字符串中获取哈希值。但我得到某种奇怪的文本而不是哈希值:

 public static string GetHashValue(string sourceString)
        {
            MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
            return Encoding.UTF8.GetString(provider.ComputeHash(Encoding.UTF8.GetBytes(sourceString)));
        }

我不认为我从这个函数得到的值实际上是一个哈希值。

提前致谢:)

2 个答案:

答案 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();
 }