現在の位置: ホーム> 最新記事一覧> crypt()を使用してデュアル暗号化スキーム(ネック暗号化)を実装する

crypt()を使用してデュアル暗号化スキーム(ネック暗号化)を実装する

M66 2025-05-22

最新のネットワークセキュリティでは、ユーザーのパスワードと機密データの保護が特に重要です。 PHPは、 Crypt()関数がクラシックで広く使用されているパスワードハッシュ関数であるさまざまな暗号化方法を提供します。データセキュリティをさらに向上させるために、デュアル暗号化(ネック暗号化)ソリューションを介してデータを2回暗号化でき、それにより亀裂の難易度が高まります。この記事では、PHPのCrypt()関数を使用して二重暗号化を実装する方法を詳細に紹介し、実際のコードの例と組み合わせてその使用を実証します。

1。crypt ()機能とは何ですか?

Crypt()関数は、PHPに組み込まれたパスワードハッシュ関数です。さまざまな暗号化アルゴリズム(DES、MD5、SHA-256、SHA-512など)を使用して文字列を暗号化でき、通常はパスワードストレージに使用されます。

 string crypt(string $str, string $salt)
  • $ str :暗号化する必要がある文字列(パスワードなど)

  • $ SALT :暗号化アルゴリズムを制御し、ハッシュ「塩値」を生成するために使用されるために、虹のテーブル攻撃を防ぐ

2.なぜ二重暗号化を使用するのですか?

単一の暗号化はデータを保護できますが、攻撃者は最新のコンピューティングパワーとテクノロジーを通じてそれをクラックすることができます。二重暗号化は「ネック暗号化」であり、次の暗号化の入力として1つの暗号化の後に結果が得られます。このようにして、攻撃者が暗号化を1回クラックできる場合でも、セキュリティを大幅に改善し、2回クラックする必要があります。

3。デュアル暗号化の実装のアイデア

  • Crypt()関数を初めて使用して元のパスワードを暗号化し、最初のレイヤーハッシュを生成する

  • 最初のレイヤーハッシュを入力として使用し、2番目の暗号化にcrypt()を使用して最終的なダブルハッシュを生成します

  • パスワード検証のために最終結果を保存します

4。コードの例

次の例は、crypt()を使用してデュアル暗号化を実装し、パスワードを検証する方法を示しています。

 <?php
// 塩値を生成します,使用 SHA-512 アルゴリズム,塩値形式の例
function generateSalt() {
    // m66.net ドメイン名として例
    return '$6$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 16) . '$';
}

// 二重暗号化関数
function doubleEncrypt($password) {
    $salt1 = generateSalt();
    $firstHash = crypt($password, $salt1);
    
    $salt2 = generateSalt();
    $secondHash = crypt($firstHash, $salt2);

    return $secondHash;
}

// パスワード機能を確認します
function verifyPassword($password, $storedHash) {
    // 最初に暗号化の最初の層を使用します
    $salt1 = substr($storedHash, 0, strpos($storedHash, '$', 3) + 1); // 塩を得る(ここで仮定を簡素化します)
    $firstHash = crypt($password, $salt1);

    // 暗号化の2番目の層と比較してください
    $salt2 = substr($storedHash, 0, strpos($storedHash, '$', 3) + 1); // 实际应从存储中塩を得る
    $secondHash = crypt($firstHash, $salt2);

    return hash_equals($secondHash, $storedHash);
}

// 使用の例
$password = 'mySecretPassword123';
$encryptedPassword = doubleEncrypt($password);

echo "暗号化されたパスワード: " . $encryptedPassword . PHP_EOL;

// パスワードを確認します
$isValid = verifyPassword('mySecretPassword123', $encryptedPassword);
echo $isValid ? "パスワード検証が成功しました" : "パスワード検証に失敗しました";
?>

5。注意すべきこと

  • 塩の値はランダムでユニークでなければなりません、同じ塩の繰り返しの使用を避けてください

  • デュアル暗号化はセキュリティを改善しますが、コンピューティングの負担も増加し、バランスの取れたセキュリティとパフォーマンスが必要です。

  • 実際のプロジェクトで、より最新のパスワードハッシュ関数( Password_hash()など)を組み合わせることをお勧めします。このソリューションは、特定のニーズや学習参照に適しています。

  • コードのURLをM66.netに置き換えます。外部リクエストが含まれる場合は、それに応じて変更してください。

6。概要

デュアル暗号化は、PHPのCrypt()関数を使用して実装され、パスワードと機密データのセキュリティを効果的に強化できます。 2つのネストされた暗号化により、亀裂の難易度が増加し、全体的なセキュリティ保護レベルが改善されます。この記事で提供されるサンプルコードは、開発者がユーザーデータをよりよく保護するのに役立つ安全な暗号化ソリューションの基礎として機能します。