繁体   English   中英

使用更快/更好的是什么:MySQL或PHP md5函数?

[英]What's faster/better to use: the MySQL or PHP md5 function?

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

什么更快, MySQL MD5功能

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

PHP MD5函数

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

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

如果您的应用程序仅在有人在您的站点上注册或登录时才计算md5,您每小时会对md5进行多次通话吗? 几百个? 如果是这样,我认为PHP和MySQL之间的真正细微差别根本就不会很大。

问题应该更像是“我将使用md5存储密码的事实放在哪里”而不是“什么使我几乎一无所获”。

而且,作为一个附带说明,另一个问题可能是:您可以在哪里负担得起用于这种计算的资源? 如果您已经有10台PHP服务器和1台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注入无关:只对数据进行转义/引用!始终!或使用准备好的语句)

我不知道哪个更快,但是如果您使用PHP进行操作,则可以避免SQL注入的可能性。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM