来自字符串的MD5哈希

时间:2012-10-19 17:15:27

标签: .net md5

需要从字符串中获取MD5哈希 获取错误MD5为空。
我想从字符串中获取32个字符的MD5哈希值。

using (System.Security.Cryptography.MD5 md5 = 
       System.Security.Cryptography.MD5.Create("TextToHash"))
{
    byte[] retVal = md5.Hash;
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < retVal.Length; i++)
    {
        sb.Append(retVal[i].ToString("x2"));
    }
}

3 个答案:

答案 0 :(得分:45)

  

需要从字符串中获取MD5哈希。

然后首先需要以某种形式将字符串转换为二进制数据。你如何做到这一点取决于你的要求,但对于某些编码它可能是Encoding.GetBytes ...你需要计算哪个编码。此哈希是否需要匹配在其他位置创建的哈希,例如?

  

获取错误MD5为空。

那是因为您错误地使用了MD5.Create。参数是算法名称。您几乎肯定只需使用parameterless overload

我怀疑你想要这样的东西:

byte[] hash;
using (MD5 md5 = MD5.Create())
{
    hash = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
}
// Now convert the binary hash into text if you must...

答案 1 :(得分:20)

传递给Create的字符串不是“要散列的文本”,而是要使用的算法。我怀疑你想要:

using (System.Security.Cryptography.MD5 md5 = 
   System.Security.Cryptography.MD5.Create())
{
    byte[] retVal = md5.ComputeHash(Encoding.Unicode.GetBytes("TextToHash"));
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < retVal.Length; i++)
    {
        sb.Append(retVal[i].ToString("x2"));
    }
}

答案 2 :(得分:1)

获得null返回的原因是string方法的Create参数指定了算法,而不是正在进行哈希处理的文本。没有TextToHash算法,因此您获得null作为返回。