1

私は基本的にこれを使用しています:

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./';
$numChars = strlen($chars);
$salt = '$2a$12$';

for($i = 0; $i < 22; ++$i) {
    $salt .= $chars[mt_rand(0, $numChars - 1)];
}

それを使っても大丈夫ですか?

4

4 に答える 4

0

使用しても大丈夫かどうかはわかりませんが、mt_randシステム時間に基づいているため、予測可能です。openssl_random_pseudo_bytes利用可能な場合は、または/dev/randomユーティリティのような優れたランダム生成アルゴリズムを使用することをお勧めします。

参照:https ://stackoverflow.com/a/6337021/454533

于 2012-08-18T04:11:06.303 に答える
0

Blowfish では、塩に 21 文字しか必要なく、残りは忘れられます。

この部分$2a$12$はソルトではなく、アルゴリズムとコスト (ハッシュの反復) です。

あなたのソルトは sha1 で簡単に作成でき、最初の 21 文字を返します。

$salt = substr(sha1($_SERVER['HTTP_HOST'].uniqid().microtime(true)),0,21);

次のようなものです:

$algo = '$2a$12$'; //Keep this safe

//store along side hash as the salt, for future compares
$salt = substr(sha1($_SERVER['HTTP_HOST'].uniqid().microtime(true)),0,21);

$hash = crypt('The string to be hashed', $algo.$salt.'$');
于 2012-08-18T04:13:19.727 に答える
0

使い勝手がいいですね。ただし、塩のランダム化に一生懸命取り組んでいます。
$salt = md5(mt_rand()) :)
次のステップでパスワードを保存したい場合は、このようなものを使用してください。

    $encryptedPassword = crypt($userPassword, $salt);

最新バージョンの PHP を使用している場合、これはデフォルトでブローフィッシュになります。

于 2012-08-18T03:56:40.157 に答える