ホームページ > バックエンド開発 > PHPチュートリアル > PHP で単純な双方向暗号化と認証を実装するにはどうすればよいですか?

PHP で単純な双方向暗号化と認証を実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-24 02:10:13
オリジナル
214 人が閲覧しました

How Can I Implement Simple Two-Way Encryption and Authentication in PHP?

PHP を使用した最も単純な双方向暗号化

バックグラウンド

注意: これらの方法を使用してパスワードを暗号化することは避けてください。代わりに、パスワード ハッシュ アルゴリズムを使用して、パスワードを安全に保存します。

PHP での移植可能なデータ暗号化

PHP 5.4 以降を使用し、コードの移植性が必要な場合は、認証された暗号化を提供する既存のライブラリを利用します。暗号化方式を選択すると、openssl_encrypt() や openssl_decrypt() などの OpenSSL メソッドを使用できます。

暗号化と復号化

Advanced Encryption Standard (AES) の使用を検討してください。暗号化用の CTR モード。この方法は、セキュリティとパフォーマンスの最適なバランスを提供します。サポートされているメソッドのリストについては、openssl_get_cipher_methods() を参照してください。

OpenSSL を使用した単純な暗号化/復号化ラッパー

次の PHP クラスは、OpenSSL を使用した単純な暗号化/復号化ラッパーを提供します。

class UnsafeCrypto
{
    const METHOD = 'aes-256-ctr';

    public static function encrypt($message, $key, $encode = false)
    {
        // ...
        if ($encode) {
            return base64_encode($nonce.$ciphertext);
        }
        return $nonce.$ciphertext;
    }

    public static function decrypt($message, $key, $encoded = false)
    {
        // ...
        $plaintext = openssl_decrypt(
            $ciphertext,
            self::METHOD,
            $key,
            OPENSSL_RAW_DATA,
            $nonce
        );
        
        return $plaintext;
    }
}
ログイン後にコピー

簡易認証Wrapper

セキュリティを強化するには、暗号化されたデータの整合性を検証するための認証を実装します:

class SaferCrypto extends UnsafeCrypto
{
    const HASH_ALGO = 'sha256';

    public static function encrypt($message, $key, $encode = false)
    {
        // ...
        if ($encode) {
            return base64_encode($mac.$ciphertext);
        }
        // Prepend MAC to the ciphertext and return to caller
        return $mac.$ciphertext;
    }

    public static function decrypt($message, $key, $encoded = false)
    {
        // ...
        $calculated = hash_hmac(
            self::HASH_ALGO,
            $ciphertext,
            $authKey,
            true
        );
        
        if (!self::hashEquals($mac, $calculated)) {
            throw new Exception('Encryption failure');
        }
        
        // Pass to UnsafeCrypto::decrypt
        $plaintext = parent::decrypt($ciphertext, $encKey);
        
        return $plaintext;
    }
}
ログイン後にコピー

以上がPHP で単純な双方向暗号化と認証を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート