Я проверил пароли для пользователей против БД.
Что быстрее, функция MySQL MD5
... pwd = MD5('.$pwd.')
ИЛИ функция PHP MD5
... pwd = '.md5($pwd).'
Каков правильный путь между двумя параметрами?
Я проверил пароли для пользователей против БД.
Что быстрее, функция MySQL MD5
... pwd = MD5('.$pwd.')
ИЛИ функция PHP MD5
... pwd = '.md5($pwd).'
Каков правильный путь между двумя параметрами?
Если ваше приложение только калькулирует md5, когда кто-то регистрируется на вашем сайте или входит в систему, может быть много вызовов на md5, вы будете делать в час? Пару сотен? Если это так, я не думаю, что разница между действительно маленькой между PHP и MySQL будет существенной.
Вопрос должен быть больше похож на "где я могу утверждать, что пароль хранится с помощью md5", чем "что заставляет меня выиграть почти ничего".
И, как побочный элемент, может возникнуть еще один вопрос: где вы можете позволить себе тратить ресурсы на такие вычисления? Если у вас есть 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-инъекций: просто избегайте/цитируйте свои данные! всегда! или используйте подготовленные заявления)
Я не знаю, что быстрее, но если вы делаете это в PHP, вы избегаете возможности SQL-инъекции.
Является ли производительность действительно проблемой? Это, вероятно, будет незначительным.
Измерьте это, это единственный способ быть уверенным.
Я бы сказал, прочитайте значение столбца из mysql, а затем сравните результат с вычисленным хэшем в вашем клиентском коде (например, php).
Основная причина этого заключается в том, что он избегает таких глупых вещей, как база данных, сопоставляющая столбец не двоичным образом (например, без учета регистра и т.д.), что обычно нежелательно для хэша.