Подтвердить что ты не робот

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

Ответ 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 как возврат.