Хранение паролей в базе данных MySQL
Самый простой способ хранить пароли в базе это положить их в таблице пользователей в открытом виде, допустим в поле с типом VARCHAR. Но при таком подходе, в случае попадания базы в руки злдоумышленника, все пароли 100% становятся ему известны.
Чтобы этого не произошло, пароль лучше хранить в зашифрованном виде, использовав алгоритмы шифрования md5, sha1 и т.п.
Например GetMD5("mypassword")=="4??{???&\?K?[>D"
Да и о самом важном, функция для C# получение MD2:
string GetMD5(string value)
{
System.Security.Cryptography.MD5CryptoServiceProvider my_pass = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.ASCII.GetBytes(value);
data = my_pass.ComputeHash(data);
return System.Text.Encoding.ASCII.GetString(data);
}
Теперь злоумышленник не сможет расщифровать пароли т.к шифрование необратимое. Но он может методом перебора шифровать различные комбинации символов и, сравнивая полученный хеш с украденным хешом пароля, подобрать пароль. И впринципе такое возможно, слышал о существовании даже целых сервисов по подбору паролей.
Для того чтобы и это безобразие приостановить добавляем к паролю случайный набор символов. Попросту в базе храним хеш пароля с набором символов и в отдельном поле этот случайный набор символов (хвостик).
Шифруем пароль в этом случае вот так:
GetMD5(GetMD5(пароль)+хвостик)
Например для пароля mypassword и хвостика mdrt2x это будет выглядеть так:
NAME |PASSWORD |HVOSTIK
MyName | ?3M?????w]? h |mdrt2x
Такое обойти будет уже куда как труднее.
P.S. Причём тут MySQL? Да собственно не причём, можно использовать такой принцип хранения паролей в любой БД.
P.P.S. В PHP преобразовать проще: md5('mypassword') — и всё…