понедельник, 2 июня 2008 г.

Шифрование паролей

Наверняка вам приходилось когда-либо восстанавливать забытый пароль от вебсайта, и вы замечали, что с вебсайта вам зачастую присылают ссылку, по которой можно задать новый пароль вместо того, чтобы просто выслать вам старый. Причина этого в том, что на этих вебсайтах ваш пароль кодируется односторонним хешированием.

То как вы храните пароли в базе данных очень важно. Если вы храните их в обычном текстовом виде, то злоумышленник, получив доступ к базе, сможет сделать все, что захочет, получив пароли администраторов системы. Именно поэтому пароли следует хешировать.

В пространстве имен System.Security.Cryptography namespace есть класс HashAlgorithm, являющийся базовым классом для всех классов алгоритмов хеширования, таких как SHA1, MD5 и др.

Метод этого класса ComputeHash принимает на вход массив типа byte с текстом, который необходимо хешировать и возвращает массив типа byte хешированного текста.

HashAlgorithm hashAl = HashAlgorithm.Create("MD5");
byte[] myPasswordInBytes = Encoding.Unicode.GetBytes(txtPassword.Text);
byte[] myHashedPassword = hashAl.ComputeHash(myPasswordInBytes);

Теперь вы можете хранить в базе хешированный пароль. А когда пользователь будет входить в свой аккаунт, введенный им пароль необходимо хешировать тем же алгоритмом и сравнить полученный хеш с хешем, хранящемся в базе данных, например так:
private bool CompareHashPasswords(byte[] hashedNewPass, byte[] hashedPass)
{
if (hashedNewPass == null || hashedPass == null || hashedNewPass.Length != hashedPass.Length)
return false;
for (int i = 0; i <>
{
if (hashedPass[i] != hashedNewPass[i])
return false;
}
return true;
}




Комментариев нет: