暗号化のために Mcrypt の代わりに OpenSSL を実装する
現在データ暗号化に Mcrypt を利用している PHP アプリケーションでは、 OpenSSL を使用した Mcrypt。元の実装では ECB モードで Blowfish 暗号が採用されていましたが、Mcrypt を OpenSSL に置き換えると、暗号化の結果と必要な IV 長が異なるため、課題が生じます。
矛盾を理解する
両方暗号化関数 mcrypt_encrypt と openssl_encrypt は異なる結果を生成します。さらに、mcrypt は、blowfish-ecb に 56 バイトの IV を必要としますが、openssl は長さ 0 の IV を使用します。これらの違いは、Mcrypt (PKCS#5) と OpenSSL (PKCS#7) で使用されるパディング アルゴリズムが異なることに起因します。
暗号化の違いに対処する
暗号化の不一致を軽減するには、mcrypt で暗号化する前に、PKCS#7 パディングを使用してデータを手動でパディングする必要があります。これにより、OpenSSL で使用されるパディング アルゴリズムとの互換性が確保されます。次の例は、このアプローチを示しています。
$key = "anotherpassword1"; $str = "does it work 12"; $enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB); $dec = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data $enc = openssl_encrypt($str, 'bf-ecb', $key, true); $dec = openssl_decrypt($enc, 'bf-ecb', $key, true); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data
移行に関する考慮事項
Mcrypt で暗号化されたデータを OpenSSL を使用して復号化することは現実的ではないため、唯一の解決策は、データ。以前に暗号化されたデータはすべて OpenSSL を使用して再暗号化する必要があるため、これには多大な移行作業が必要になります。
以上がPHP でのデータ暗号化のために Mcrypt から OpenSSL に移行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。