Вопрос

У меня есть пара различных кусочков кода, но в рассказе я вставляю некоторые пароли в базу данных MySQL, используя SHA1, а также вычисляют хэши SHA1 в .NET, и они не соответствуют. Я думаю, что это проблема с кодом кодирования в .net.

SQL Code:

INSERT INTO user_credentials (Password) VALUES (SHA1('password'));

Пароль HASHE до 5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8

.NET CODE:

public static string GetPasswordHash(string password)
{
    // problem here with encoding?
    byte[] byteArray = Encoding.ASCII.GetBytes(password);

    SHA1 sha = new SHA1CryptoServiceProvider();
    byte[] hashedPasswordBytes = sha.ComputeHash(byteArray);

    return Encoding.ASCII.GetString(hashedPasswordBytes);
}

Пароль хэш в [? a ?????%l? 3 ~ ???

Спасибо за помощь!

Это было полезно?

Решение

В примере MySQL вы кодируете шестнадцатеричный Строка, в примере .NET, который вы кодируете в ASCII. Две кодировки не совпадают.

Если вы конвертируете в Hexadecimal в версии .NET, вы получите правильный результат:

string hex = BitConverter.ToString(hashedPasswordBytes);

Результат:

5B-AA-61-E4-C9-B9-3F-3F-06-82-25-0B-6C-F8-33-1B-7E-E6-8F-D8

Другие советы

Вам нужно положить [?a??????%l?3~??? в Гекс представление. То, что вы печатаете, вероятно, в бинарной форме (отсюда и множественные ? chars).

Попробуйте сделать это:

string hexstring = BitConverter.ToString(hashedPasswordBytes);

И посмотрите, есть ли hexstring и MySQL HASH Match.

Следующее даст вам точное соответствие тому, что производит MySQL:

 BitConverter.ToString(SHA1CryptoServiceProvider.Create().ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(Password))).Replace("-", "").ToLower();

Хэши SHA1 должны быть равны, но представление нет. MySQL выводит шестигранную строку, поэтому вам нужно будет сделать то же самое в .NET:

return String.Join(String.Empty, hashedPasswordBytes.Select(b => b.ToString("x2")))

Как кодируется ваша таблица MySQL/база данных? Попробуйте установить оба на UTF-8 (поэтому с помощью encoding.utf8.getbytes)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top