ユーザーのパスワードをDBと照合しました。
より速いのは、MySQL MD5 関数
... pwd = MD5('.$pwd.')
またはPHP MD5 関数
... pwd = '.md5($pwd).'
2 つのオプションの間の正しい方法は何ですか?
ユーザーのパスワードをDBと照合しました。
より速いのは、MySQL MD5 関数
... pwd = MD5('.$pwd.')
またはPHP MD5 関数
... pwd = '.md5($pwd).'
2 つのオプションの間の正しい方法は何ですか?
誰かがあなたのサイトに登録したとき、またはログインしているときにアプリケーションが md5 のみを計算している場合、md5 への多くの呼び出しを 1 時間ごとに行いますか? 数百?もしそうなら、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
しかし、おそらくこのように 100 万個の md5 を計算することはないでしょう?
(そして、これは SQL インジェクションの防止とは何の関係もありません。データをエスケープ/クォートするだけです! 常に ! または準備済みステートメントを使用してください)
どちらが速いかはわかりませんが、PHP で実行すると、SQL インジェクションの可能性を回避できます。
ここで本当にパフォーマンスが問題になるのでしょうか? 限界である可能性が高いです。
測定してください。それが確実な唯一の方法です。
mysql から列の値を読み取り、その結果をクライアント コード (php など) で計算されたハッシュと比較します。
これを行う主な理由は、データベースが非バイナリ形式 (大文字と小文字を区別しないなど) で列を照合するなどの愚かなことを回避するためです。これは一般的にハッシュには望ましくありません。