Я храню свой password
в столбце таблицы базы данных с кодом string
. Перед хранением в базе данных я делаю это Hash encoded
используя C# метод ниже:Сравнение паролей, кодированных хешем
public static string Md5Encrypted(string password)
{
byte[] pass = Encoding.UTF8.GetBytes(password);
MD5 md5 = new MD5CryptoServiceProvider();
string strPassword = Encoding.UTF8.GetString(md5.ComputeHash(pass));
return strPassword;
}
Теперь я хочу compare
него, вставляя новый пароль.
Для этого я беру запись конкретного пользователя из базы данных и получая его существующий закодированный пароль в строке. Если я использую тот же пароль, то он также не подходит. Например, если я прохожу adgjl135
в качестве пароля, он кодируется как Pb�ZsÈU��}��
, но из базы данных я получаю Pb?ZsÈU??}??
, но очевидно, что они не совпадут. Тогда как мне их сравнить? Есть идеи??
Вы неправильно храните пароли. Либо используйте тип данных байтового массива в базе данных, либо кодируйте хэш как шестнадцатеричные цифры/base64 перед его сохранением. (Почему вы считаете, что MD5 что-то является допустимой строкой UTF-8?) – millimoose
Также не очень безопасно хранить пароли в базе данных несолены. Лучше, чем unhashed, но в случае, когда ваша база данных будет украдена, люди с паролями, доступными в радужных таблицах, будут подвержены риску заражения. – millimoose
@AndreLoker Его отличия .. Я хочу сравнить пароли сейчас, так как у меня нет метода его декодирования. – Dev