現在の位置: ホーム> 最新記事一覧> crypt()を使用してパスワードを暗号化する方法

crypt()を使用してパスワードを暗号化する方法

M66 2025-05-30

最新のWebアプリケーション開発では、ユーザーパスワードの安全なストレージが重要です。 PHPは、さまざまなパスワード暗号化方法を提供します。その中には、Crypt()関数は柔軟で強力な暗号化ツールです。この記事では、PHPのCrypt()機能を使用してユーザーパスワードを安全に暗号化および検証する方法を紹介し、一般的なセキュリティトラップを回避する方法を説明します。

1。crypt ()関数を理解します

crypt()は、複数の暗号化アルゴリズムをサポートするパスワードハッシュ関数です。特定のアルゴリズムは、渡す「塩」に依存します。さまざまなアルゴリズムには、 SHA-256SHA-512などの塩形式が異なります。Crypt ()の合理的な使用は、強力なパスワードハッシュを生成し、亀裂の難易度を高めることができます。

 string crypt(string $password, string $salt);
  • $パスワードは、ユーザーが入力したPlantextパスワードです。

  • $塩は、暗号化アルゴリズムとランダム塩値を指定するために使用され、各暗号化の結果が異なることを確認します。

2。塩値を安全に生成します

塩の機能は、虹のテーブル攻撃を防ぐことであり、各パスワードには一意の塩値が必要です。最新のアルゴリズムの場合、塩にはアルゴリズムの識別、反復数、ランダム文字が含まれている必要があります。

次の例では、SHA-512アルゴリズムに基づいて塩を生成します。

 function generateSalt($length = 16) {
    $randomBytes = random_bytes($length);
    return '$6$rounds=5000$' . substr(strtr(base64_encode($randomBytes), '+', '.'), 0, 16) . '$';
}
  • $ 6 $は、 SHA-512を使用することを意味します。

  • ラウンド= 5000はハッシュ反復の数を制御します。

  • ランダムな文字列は、塩の独自性を確保します。

3。crypt ()を使用してパスワードを暗号化します

上記の塩を組み合わせると、次のようなパスワードを暗号化できます。

 $password = 'user_password_here';
$salt = generateSalt();
$hash = crypt($password, $salt);

$ hashは、データベースに保存されているパスワードハッシュ文字列です。

4.ユーザーパスワードを確認します

検証中、パスワードとハッシュを直接比較することはできませんが、 Crypt()をユーザー入力パスワードと呼び出し、保存されたハッシュを塩として渡します。関数は塩を自動的に抽出し、パスワードを暗号化します。

 function verifyPassword($inputPassword, $storedHash) {
    $hash = crypt($inputPassword, $storedHash);
    return hash_equals($hash, $storedHash);
}

Hash_equals()を使用して、タイミング攻撃を防ぎ、比較的安全にします。

5。完全な例

<?php
// 塩機能を生成します
function generateSalt($length = 16) {
    $randomBytes = random_bytes($length);
    return '$6$rounds=5000$' . substr(strtr(base64_encode($randomBytes), '+', '.'), 0, 16) . '$';
}

// 登録時にパスワードを暗号化します
function encryptPassword($password) {
    $salt = generateSalt();
    return crypt($password, $salt);
}

// ログインするときにパスワードを確認します
function verifyPassword($inputPassword, $storedHash) {
    $hash = crypt($inputPassword, $storedHash);
    return hash_equals($hash, $storedHash);
}

// 例
$userPassword = 'MySecurePass123';
$storedHash = encryptPassword($userPassword);

echo "暗号化されたハッシュ: " . $storedHash . "\n";

$inputPassword = 'MySecurePass123';
if (verifyPassword($inputPassword, $storedHash)) {
    echo "パスワード検証が成功しました!";
} else {
    echo "エラーパスワード!";
}
?>

6。追加のアドバイス

  • PHP 7.2+のpassword_hash()password_verify()を使用してみてください。これは、より近代的で安全なアルゴリズムをカプセル化しますが、特別な理由でcrypt()を使用する必要がある場合は、上記の方法を参照してください。

  • パスワードハッシュ戦略を定期的に更新して、反復回数を増やします。

  • データベースに保存されているハッシュ文字列には、塩とアルゴリズムの情報が含まれており、塩を個別に保管する必要はありません。