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"));}}
3

Best Answer


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...

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"));}}

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.