注意: これらの方法を使用してパスワードを暗号化することは避けてください。代わりに、パスワード ハッシュ アルゴリズムを使用して、パスワードを安全に保存します。
PHP 5.4 以降を使用し、コードの移植性が必要な場合は、認証された暗号化を提供する既存のライブラリを利用します。暗号化方式を選択すると、openssl_encrypt() や openssl_decrypt() などの OpenSSL メソッドを使用できます。
Advanced Encryption Standard (AES) の使用を検討してください。暗号化用の CTR モード。この方法は、セキュリティとパフォーマンスの最適なバランスを提供します。サポートされているメソッドのリストについては、openssl_get_cipher_methods() を参照してください。
次の 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; } }
セキュリティを強化するには、暗号化されたデータの整合性を検証するための認証を実装します:
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 サイトの他の関連記事を参照してください。