2

php.netがここに述べているように:

このハッシュアルゴリズムは高速であるため、この関数を使用してパスワードを保護することはお勧めしません。

PHPでプログラミングを始めてからこの関数を使用しましたが、調査した結果、推奨されていmd5ないことは明らかであり、別の方法を使用する必要があります。md5

私は可能な代替案を知っていsha1ます。他にもありますか?

これらの他のものの利点は何ですか、そしてsha1(より高いセキュリティを除く)?

そして最も重要なことは、sha1ハッシュまたは他のハッシュアルゴリズムのいずれかをJavaScriptで複製できるかどうかです。

私はmd5javascriptにプラグインを持っており、それは私の安全なアプリケーションのいくつかの鍵です。したがって、javascriptプラグインを備えたハッシュアルゴリズムを持つことは絶対に不可欠です。

4

2 に答える 2

3

SHA1とMD5には、ほぼ同じ弱点があります。それらの衝突耐性は壊れています。したがって、MD5が間違っていると、SHA1も間違っています。それらの出力も少し短いです。衝突耐性が必要な場合は、少なくとも256ビットのハッシュをお勧めします。256ビット以上が必要になることはめったにありません。

通常のハッシュアプ​​リケーションの場合、SHA-256(SHA-2ファミリーの一部)が適切な選択です。性能はそれほど良くありませんが、これまでのところ衝突耐性を破った人は誰もいません。SHA-3-256を使用することもできますが、ライブラリのサポートはまだそれほど優れていません。

パスワードハッシュには、scrypt、bcrypt、PBKDF2などの特殊な構造が必要です。一意のソルトと十分な反復回数を使用します。プレーンハッシュは使用しないでください。高速すぎます。

MAC(メッセージ認証)には、プレーンなSHA-256ではなく、HMAC-SHA-256などの特殊な構造を使用します。


今後のWebCryptoAPIには、これらの操作のほとんどの関数が含まれます。

デプロイされるまで、PBKDF2とSHA-256の両方を提供するcrypto-jsを使用できます。


しかし、私はあなたのアーキテクチャについて少し疑わしいです。javascriptでパスワードをハッシュすることが正しい選択になることはめったにありません。標準的な手順は、SSL / TLSを使用し、プレーンテキストのパスワードを送信することです。TLSを使用しない限り、ブラウザのjavascriptでセキュリティを実現することはできません。

于 2012-11-20T11:00:14.627 に答える
0

はい、他にも多くのハッシュアルゴリズムがあり、よりもはるかに強力ですSHA1。たとえば、を確認してください。SHA512たとえば、の128ビットに対して512ビットがありますMD5。とにかく、あなたが本当の安全を探しているなら、あなたは次のいずれかを適用するべきです:

1)「固定塩」:の代わりにmd5($pass)、次を使用します。

$salt="NaCl";
$hash=md5($salt);

2)「ランダムソルト」:md5($ pass)'の代わりに、rand($minValue, $maxValue)範囲が広いランダムソルト(関数を使用)を生成します(たとえばrand(0, pow(10, 100))、使用しますmd5($pass, $salt)ハッシュとソルトの両方を保存することを忘れないでください!

3)暗号化:固定キーまたはランダムキーのいずれかを使用し(前述の方法を参照)、それを使用してパスワードを暗号化します。私は本当にBlowfishアルゴリズムを提案したいと思います。PHP.netのページから:

<?php
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $key = "This is a very secret key";
    $text = "Meet me at 11 o'clock behind the monument.";
    echo strlen($text) . "\n";

    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
    echo strlen($crypttext) . "\n";
?>

JavaScriptでのSHA512の実装(ソルト生成なし)(CryptoJSライブラリから):

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/sha512.js"></s‌​cript>
<script> var hash = CryptoJS.SHA512("Message"); </script>

JavaScriptでのbcryptの実装:この例を参照してください。

于 2012-11-20T10:51:56.707 に答える