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

Вот шаги, которые работали для меня в ubuntu 12.04 для python 3.3.

1) open teminal и write sudo apt-get install libreadline-dev

2) скачать исходный файл python 3.3 .2 из http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz

3) извлечь его и перейти в каталог Python-3.3.2 / в оболочке

4) выполните следующую команду:

./configure
make
make test
sudo make install

13
задан FrankerZ 18 August 2016 в 11:56
поделиться

5 ответов

Если ваше приложение вычисляет 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-инъекций: просто экранируйте / цитируйте свои данные! всегда! или используйте подготовленные операторы)

25
ответ дан 1 December 2019 в 19:50
поделиться

I don't know which is faster, but if you do it in PHP you avoid the possibility of SQL injection.

5
ответ дан 1 December 2019 в 19:50
поделиться

Действительно ли здесь проблема с производительностью? Это, вероятно, будет незначительным.

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

Измерьте, это единственный способ узнать наверняка.

0
ответ дан 1 December 2019 в 19:50
поделиться

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

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

0
ответ дан 1 December 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: