MD5 Hash From String
Нужно получить хэш MD5 из строки.
Получить ошибку MD5 - null.
Я связываю, чтобы получить 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"));
}
}
Ответы
Ответ 1
Нужно получить хэш MD5 из строки.
Затем сначала вам нужно преобразовать строку в двоичные данные в некоторой форме. Как вы это сделаете, это будет зависеть от ваших требований, но, вероятно, для некоторой кодировки, вероятно, будет Encoding.GetBytes
... вам нужно разобраться в какой кодировке. Этот хеш должен соответствовать хешу, созданному где-то еще, например?
Получить ошибку MD5 имеет значение null.
Это потому, что вы неправильно используете 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...
Ответ 2
Строка, переданная в Create
, не является "text to hash", а используется алгоритм. Я подозреваю, что вы хотите:
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"));
}
}
Ответ 3
Причина, по которой вы получаете return null
, - это параметр string
для метода Create
, задает алгоритм, а не текст, который хэшируется. Нет алгоритма TextToHash, поэтому вы получаете null
как возврат.