ホームページ >バックエンド開発 >PHPチュートリアル >双方向暗号化により、PHP でのパスワードの保管と取得をどのように保護できるのでしょうか?

双方向暗号化により、PHP でのパスワードの保管と取得をどのように保護できるのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-17 00:15:25908ブラウズ

How Can Two-Way Encryption Secure Password Storage and Retrieval in PHP?

双方向暗号化: パスワードの安全な保管と取得

はじめに

取得が必要なパスワードの安全な保管については、双方向暗号化は不可欠です。この記事では、PHP でパスワードを暗号化および復号化し、ユーザーのアクセシビリティを維持しながらプライバシーを確​​保する方法について説明します。

PHP でのパスワードの暗号化と復号化

PHP でパスワードを暗号化するにはでは、mcrypt ライブラリを使用できます。次の関数は暗号化プロセスを示しています:

function encryptPassword($password, $key)
{
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);

    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_CBC, $iv);
}

パスワードを復号化するには、同様の関数を使用します:

function decryptPassword($encryptedPassword, $key)
{
    $iv = substr($encryptedPassword, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));

    return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, substr($encryptedPassword, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)), MCRYPT_MODE_CBC, $iv);
}

安全な暗号化アルゴリズムの選択

暗号化アルゴリズム、Blowfish および Rijndael-128 について(AES-128) は、パスワード暗号化にとって安全な選択肢であると考えられています。ブルート フォース攻撃に対する高レベルの保護を提供します。

秘密キーのストレージ

暗号化に使用される秘密キーを保護することが不可欠です。秘密キーを保存するためのさまざまなオプションには次のものがあります:

  • 暗号化: キーを別のパスワードで暗号化し、個別に保存します。
  • HSM (ハードウェア)セキュリティ モジュール): 安全なキー用に設計された物理デバイスにキーを保存しますstorage.
  • キーの分割: キーを複数の部分に分割し、異なる場所に保存します。

秘密キーのユーザー入力の要求

パスワードを復号化する必要があるたびにユーザーに秘密キーの入力を要求すると、追加のセキュリティが確保されます。 安全。これにより、キーが侵害された場合でも不正アクセスが防止されます。

潜在的なセキュリティ脆弱性

  • 中間者 (MITM) 攻撃: 暗号化されたデータを傍受する
  • コードインジェクション: 安全でないコードにより、攻撃者が秘密鍵や暗号化されたデータにアクセスできる可能性があります。
  • ブルートフォース攻撃: 特殊なソフトウェアの使用暗号化キーを推測します。

軽減リスク

  • 強力な暗号化アルゴリズム (Blowfish や AES-128 など) を実装します。
  • 暗号化、HSM、またはキー分割を通じて秘密キーを保護します。
  • データに安全な SSL/TLS プロトコルを使用する
  • セキュリティ対策を定期的に確認し、更新します。

暗号化用の PHP クラスの例:

class Encryption
{
    private $key = '';
    private $algorithm = '';

    public function __construct($key, $algorithm = MCRYPT_RIJNDAEL_128)
    {
        $this->key = $key;
        $this->algorithm = $algorithm;
    }

    public function encrypt($data)
    {
        $iv = mcrypt_create_iv(mcrypt_get_iv_size($this->algorithm, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);

        return mcrypt_encrypt($this->algorithm, $this->key, $data, MCRYPT_MODE_CBC, $iv) . $iv;
    }

    public function decrypt($data)
    {
        $ivSize = mcrypt_get_iv_size($this->algorithm, MCRYPT_MODE_CBC);
        $iv = substr($data, 0, $ivSize);

        return mcrypt_decrypt($this->algorithm, $this->key, substr($data, $ivSize), MCRYPT_MODE_CBC, $iv);
    }
}

以上が双方向暗号化により、PHP でのパスワードの保管と取得をどのように保護できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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