Что быстрее / лучше использовать: функция MySQL или PHP md5?

Я проверил пароли для пользователей против БД.

что быстрее, то в MySQL функции MD5

... pwd = MD5('.$pwd.')

или PHP функции MD5

... pwd = '.md5($pwd).'

каков правильный путь между двумя вариантами?

5 ответов


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

вопрос должен быть больше похож на "где я могу поместить тот факт, что пароль хранится с помощью md5", чем"что заставляет меня выиграть почти ничего".

и, как sidenote, другой вопрос может быть : где вы можете позволить себе тратить ресурсы на такого рода расчеты ? Если у вас есть 10 PHP-серверов и один сервер БД уже под большой нагрузкой, вы получите свой ответ; -)

но, просто для удовольствия :

mysql> select benchmark(1000000, md5('test'));
+---------------------------------+
| benchmark(1000000, md5('test')) |
+---------------------------------+
|                               0 |
+---------------------------------+
1 row in set (2.24 sec)

и в PHP :

$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
    $a = md5('test');
}
$after = microtime(true);
echo ($after-$before) . "\n";

выдает :

$ php ~/developpement/tests/temp/temp.php
3.3341760635376

но вы, вероятно, не будете вычислять миллион md5, как это, не так ли ?

(и это не имеет ничего общего с предотвращением SQL-инъекций : просто escape / quote ваши данные ! всегда ! или используйте подготовленные заявления)


Я не знаю, что быстрее, но если вы делаете это в PHP, вы избегаете возможности SQL-инъекции.


действительно здесь проблема? Скорее всего, это будет маргинально.

  • делать это в MySQL заставляет DB делать больше работы, что хорошо
  • делать это в MySQL означает, что пароль открытого текста передается дальше (и соединение с БД часто незашифровано).
  • Это не имеет ничего общего с SQL-инъекции. Вы можете исправить первую версию без перемещения функции MD5. Также, если была ошибка в функции MD5 PHP, все еще есть возможность инъекционной атаки.

измерить-это единственный способ быть уверенным.


Я бы сказал, прочитайте значение столбца из mysql, затем сравните результат с вычисленным хэшем в вашем клиентском коде (например, php).

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