私は基本的にこれを使用しています:
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./'; $numChars = strlen($chars); $salt = '$2a$12$'; for($i = 0; $i < 22; ++$i) { $salt .= $chars[mt_rand(0, $numChars - 1)]; }
それを使っても大丈夫ですか?
使用しても大丈夫かどうかはわかりませんが、mt_rand
システム時間に基づいているため、予測可能です。openssl_random_pseudo_bytes
利用可能な場合は、または/dev/random
ユーティリティのような優れたランダム生成アルゴリズムを使用することをお勧めします。
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.'$');
使い勝手がいいですね。ただし、塩のランダム化に一生懸命取り組んでいます。
$salt = md5(mt_rand()) :)
次のステップでパスワードを保存したい場合は、このようなものを使用してください。
$encryptedPassword = crypt($userPassword, $salt);
最新バージョンの PHP を使用している場合、これはデフォルトでブローフィッシュになります。