ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用してパスワードを安全に暗号化および復号化するにはどうすればよいですか?

PHP を使用してパスワードを安全に暗号化および復号化するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 10:05:10462ブラウズ

How Can I Securely Encrypt and Decrypt Passwords Using PHP?

パスワードの安全な処理: 暗号化と復号化

パスワードなどの機密データを保存する場合、適切なセキュリティ対策を採用することが重要です。ハッシュ関数はパスワードを不可逆的に保護するために使用されますが、可逆的な暗号化が必要な場合もあります。

有効な暗号化方式としての Base64 に関する誤解にもかかわらず、Base64 は依然として単純なエンコード技術です。代わりに、パスワードを暗号化および復号化するためのより安全なアプローチを掘り下げます。これには、base64 エンコードの前後でデータを変更するための独自のスクランブルを作成することが含まれます。

このメソッドを実装するには、キー (「パスワード」) を定義します。 (en/de)crypt") と暗号化する文字列 (" 暗号化する文字列) ").

暗号化プロセス

$iv = mcrypt_create_iv(
    mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
    MCRYPT_DEV_URANDOM
);

$encrypted = base64_encode(
    $iv .
    mcrypt_encrypt(
        MCRYPT_RIJNDAEL_128,
        hash('sha256', $key, true),
        $string,
        MCRYPT_MODE_CBC,
        $iv
    )
);

このコードは、初期化ベクトル (IV) を作成し、強力なハッシュ アルゴリズム (SHA-256) を使用して暗号化プロセスを開始します。 ) 提供されたキーから暗号化キーを生成します。その後、データは CBC モードの安全性の高い暗号化アルゴリズム (RIJNDAEL-128) を使用して暗号化されます。暗号化された結果は、その後 Base64 エンコードされて難読化された文字列が生成されます。

復号化プロセス

$data = base64_decode($encrypted);
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));

$decrypted = rtrim(
    mcrypt_decrypt(
        MCRYPT_RIJNDAEL_128,
        hash('sha256', $key, true),
        substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)),
        MCRYPT_MODE_CBC,
        $iv
    ),
    ""
);

復号化プロセスでは、暗号化シーケンスが逆になります。 Base64 でエンコードされた文字列がデコードされ、IV が取得されます。暗号化キーが再計算され、IV と元のキーを使用してデータが復号化されます。最後に、末尾の null バイトがすべて削除され、元のクリアテキスト文字列が生成されます。

注意: 提供されたコードは、暗号化/復号化プロセスを説明するのに効果的ではありますが、現在の形式では本番環境での使用を目的としていません。適切な認証メカニズムや、機密データを保護するために不可欠なその他のセキュリティ対策が欠けています。パスワード暗号化を扱うときは、常に認証された暗号化技術を使用し、確立された業界のベスト プラクティスをガイダンスとして参照してください。

以上がPHP を使用してパスワードを安全に暗号化および復号化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。