Reputation: 45096
Need to get MD5 hash from string.
Get an error MD5 is null.
I am tying to get a 32 character MD5 hash from a string.
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"));
}
}
Upvotes: 29
Views: 41656
Reputation: 754505
The reason you are getting a null
return is the string
parameter to the Create
method speciies the algorithm, not the text that is being hashed. There is no TextToHash algorithmn hence you get null
as the return.
Upvotes: 1
Reputation: 564323
The string passed to Create
is not the "text to hash", but the algorithm to use. I suspect you want:
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"));
}
}
Upvotes: 28
Reputation: 1499660
Need to get MD5 hash from string.
Then first you need to convert your string to binary data in some form. How you do that will depend on your requirements, but it'll probably be Encoding.GetBytes
for some encoding... you need to work out which encoding though. Does this hash need to match the hash created somewhere else, for example?
Get an error MD5 is null.
That's because you're using MD5.Create
incorrectly. The argument is an algorithm name. You should almost certainly just use the parameterless overload instead.
I suspect you want something like:
byte[] hash;
using (MD5 md5 = MD5.Create())
{
hash = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
}
// Now convert the binary hash into text if you must...
Upvotes: 56