需要从字符串中获取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"));
}
}
答案 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
作为返回。