Найти в Дзене
WebTechnology

MD5 хэширование в PHP

В этой статье я решил затронуть тему MD5 хэширования, так как тема эта очень простая, интересная и очень-очень важная. Самый простой пример использования MD5 хэша - это шифрование паролей пользователей. Ведь не секрет, что если хранить пароли в открытом виде в базе данных, то при её утере, все пароли пользователей будут украдены, чего не имеет никакого морального права допустить администратор. И вот тут на помощь приходит функция хэширования в PHP. Функция MD5 хэширования в PHP называется md5(). Принимает функция одну строку, которую необходимо зашифровать. Функция возвращает MD5 хэш: <?php
  $str = "MyPassword";
  echo md5($str);
?>   Запустив данный скрипт, Вы увидите MD5-хэш, соответствующий строке "MyPassword".   То есть простейший скрипт проверки логина и пароля: <?php
  $login = "Admin";
  $password = "48503dfd58720bd5ff35c102065a52d7"; //В реальности считывается из БД
if (($_GET['login'] == $login) && (md5($_GET['password']) == $password)) echo "Welcome!";
else echo "Access

В этой статье я решил затронуть тему MD5 хэширования, так как тема эта очень простая, интересная и очень-очень важная. Самый простой пример использования MD5 хэша - это шифрование паролей пользователей. Ведь не секрет, что если хранить пароли в открытом виде в базе данных, то при её утере, все пароли пользователей будут украдены, чего не имеет никакого морального права допустить администратор. И вот тут на помощь приходит функция хэширования в PHP.

Функция MD5 хэширования в PHP называется md5(). Принимает функция одну строку, которую необходимо зашифровать. Функция возвращает MD5 хэш:

<?php
  $str = "MyPassword";
  echo md5($str);
?>

  Запустив данный скрипт, Вы увидите MD5-хэш, соответствующий строке "MyPassword".

  То есть простейший скрипт проверки логина и пароля:

<?php
  $login = "Admin";
  $password = "48503dfd58720bd5ff35c102065a52d7"; //В реальности считывается из БД
if (($_GET['login'] == $login) && (md5($_GET['password']) == $password)) echo "Welcome!";
else echo "Access denied";
?>

Теперь если Вы пройдёте по ссылке: "http://путь_к_скрипту.php?login=Admin&password=MyPassword", то увидите: "Welcome!".

Теперь поговорим о свойствах MD5-хэширования.

  • MD5-хэш содержит 32 символа
  • MD5-хэш уникален для каждой строки
  • Процесс MD5-хэширования необратим
  • Процесс MD5-хэширования достаточно медлителен

Третий пункт, пожалуй, самый важный, потому что если бы он был обратим, то смысл хэширования практически бы отсутствовал. Глупо шифровать, например, пароли, если их можно легко потом расшифровать.

Четвёртый пункт, как бы это парадоксально не звучало, также является очень большим плюсом. Почему? Очень просто: человек, который будет вынужден подождать этот процесс 0.001 секунды, сильно не пострадает. А вот злоумышленник, который будет перебирать пароли пострадает резко, так как медлительность алгоритма уже задаёт предел - 1000 паролей в секунду. Хотя, безусловно, скорость зависит от быстродействия сервера. Но тем не менее, для злоумышленника низкая скорость получения MD5-хэша - это очень большая проблема.

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