SHA* アルゴリズムは速すぎるため、パスワードのハッシュには適していません。代わりに、BCrypt や PBKDF2 のような遅いアルゴリズムを、必要な時間を制御するコスト ファクターと共に使用する必要があります。
PHP は、新しい関数password_hash()で BCrypt アルゴリズムをサポートします。以前の PHP バージョン用の互換パックもあります。
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
独自のソルトを渡すのではなく、オペレーティング システムのランダム ソースから暗号的に安全なソルトを関数に作成させることをお勧めします。
ソルトは結果のハッシュ値に含まれるため、個別に保存する必要はありません。データベースに 60 文字の文字列フィールドを作成し、ハッシュ値を保存するだけです。この関数password_verify()
は、保存されたハッシュ値から使用されたソルトを抽出します。詳細については、パスワードの保存に関する私のチュートリアルをご覧ください。