什么更快/更好使用:MySQL或PHP md5功能?

时间:2009-07-26 13:05:58

标签: php mysql performance function md5

我根据数据库检查了用户的密码。

什么是更快, MySQL MD5功能

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

PHP MD5功能

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

两种选择之间的正确方法是什么?

5 个答案:

答案 0 :(得分:25)

如果您的应用程序只是在有人在您的网站上注册或登录时计算md5,那么您每小时会有多少次调用md5吗?几百个?如果是这样,我认为PHP和MySQL之间的非常小差异根本不会很大。

问题应该更像是“我在哪里使用md5存储密码的事实”而不是“什么让我几乎什么都不赢”。

而且,作为旁注,另一个问题可能是:您可以在哪里花费资源进行这种计算?如果您有10台PHP服务器和一台DB服务器已经负载很重,那么您可以得到答案; - )

但是,只是为了好玩:

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注入无关:只需转义/引用您的数据!总是!或使用预准备语句)

答案 1 :(得分:5)

我不知道哪个更快,但如果你在PHP中这样做,就可以避免SQL注入的可能性。

答案 2 :(得分:3)

性能真的是一个问题吗?这可能是微不足道的。

  • 在MySQL中完成它会让数据库做得更多,这是一件好事
  • 在MySQL中执行意味着明文密码会被进一步传递(并且数据库连接通常是未加密的)。
  • 这与SQL注入无关。您可以在不移动MD5功能的情况下修复第一个版本。此外,如果PHP的MD5功能存在错误,则仍有可能发生注入攻击。

答案 3 :(得分:0)

衡量它,这是确定的唯一方法。

答案 4 :(得分:0)

我想说,从mysql中读取列值,然后将结果与客户端代码中的计算哈希进行比较(例如php)。

这样做的主要原因是它避免了诸如数据库以非二进制方式(例如不区分大小写等)对列进行整理等愚蠢的事情,这通常不适合散列。