Заметки, ПроектыMD5 и скорость выборки

Пару дней назад завязался небольшой диалог в твиттере по поводу шифрования паролей в веб-сервисах. На фразу «кто не использует — идиот» мне ответили в стиле:

Шифрование создает сильную дополнительную нагрузку для веб-сервиса и большие проекты избегают подобного.

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

Собственно, сам тест очень простой. Я создал таблицу, в которой 3 поля:

  1. id — привычка;
  2. str — данные в открытом виде (в тесте совпадает с id);
  3. pass — хешированные данные (md5(id)).

Таблицу заполнил 10000-ми строками. Теперь сами тесты:

mysql_connect('openserver', 'root', NULL) or die('err connect');
mysql_select_db('md5') or die('err select db');

$start = microtime(TRUE);
for($i=1;$i<=10000;$i++)
{
mysql_query('SELECT FROM `str` WHERE `str`="'.$i.'" LIMIT 1');
//    mysql_query('SELECT FROM `str` WHERE `pass`=MD5("'.$i.'") LIMIT 1');
//    mysql_query('SELECT FROM `str` WHERE `pass`="'.md5($i).'" LIMIT 1');
}

echo microtime(TRUE) - $start;

Из кода видно, что я проверяю 3 типа запросов:

  1. запрос по не хешированной строке;
  2. запрос по md5, хеширование внутри mysql;
  3. запрос по md5, хеширование в php.

MD5 и скорость выборки →