システムのパスワード暗号化に Bcrypt を使用したいと考えています。しかし、すべての例は次のようなものです。
$password = $_POST['password'];
$salt = substr(str_replace('+', '.', base64_encode(sha1(microtime(true), true))), 0, 22);
$hash = crypt($password, '$2a$12$'.$salt);
これは私にはかなり安全に見えますが、各例で、Bcrypt を使用する前に誰もパスワードをハッシュしていないのではないかと思っていました。
固有のソルトにより、Rainbow テーブルは一度にすべてのパスワードをクラックできないはずです。しかし、ハッカーが 1 つのレコードを取得し、その特定のレコードのソルトを使用してレインボー テーブルを作成した場合、脆弱なパスワードを解読できるはずです。
したがって、誰かが脆弱なパスワード (「foo」としましょう) を使用した場合、Bcrypt を使用する前に、まず SHA-512 でハッシュする方が安全です。私は正しいですか?それとも、これはより安全に見えるだけですか?