改善できる点がいくつかありますが、最初にPHPの新機能 password_hash() 。この関数は安全なソルトを生成し、結果のハッシュ値に含めるため、単一のデータベースフィールドに格納できます。 互換性パック もあります 以前のバージョンの場合。
// 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);
コードに関するいくつかの考え:
- crypt()を使用してBCryptハッシュを生成するため、ソルトは結果のハッシュの一部になります。個別に保管する必要はありません。
- ソルトの生成を改善できます。オペレーティングシステムMCRYPT_DEV_URANDOMのランダムソースを使用してください。
- コスト係数を9に変更すると、cryptは2桁を想定しているため、形式は無効になります。