26

需要从字符串中获取 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"));
    }
}
4

3 回答 3

52

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

然后首先你需要以某种形式将你的字符串转换为二进制数据。你如何做到这一点取决于你的要求,但它可能是Encoding.GetBytes一些编码......你需要弄清楚哪种编码。例如,这个散列是否需要与在其他地方创建的散列相匹配?

得到一个错误 MD5 为空。

那是因为你使用MD5.Create不当。参数是算法名称。您几乎可以肯定只使用无参数重载

我怀疑你想要类似的东西:

byte[] hash;
using (MD5 md5 = MD5.Create())
{
    hash = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
}
// Now convert the binary hash into text if you must...
于 2012-10-19T17:17:32.387 回答
24

传递给的字符串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"));
    }
}
于 2012-10-19T17:18:16.223 回答
1

您获得null返回的原因是string该方法的参数指定Create了算法,而不是被散列的文本。没有 TextToHash 算法,因此您会得到null回报。

于 2012-10-19T17:19:19.287 回答