従来の暗号化ライブラリである Mcrypt は、セキュリティの脆弱性と業界標準としての OpenSSL の出現により廃止されました。 Mcrypt から OpenSSL への切り替えは困難に思えるかもしれませんが、主な違いを理解し、適切な戦略を採用することで簡素化できます。
使用している暗号である Blowfish には、暗号化のためのデータパディング。 OpenSSL は PKCS#7 パディングを使用しますが、Mcrypt は PKCS#5 を使用します。 PKCS#7 では最小パディング長 1 が必要ですが、PKCS#5 では 0 が受け入れられます。この違いは、各ライブラリから取得される暗号化結果に影響します。
ECB モードでは、この場合、初期化ベクトル (IV) は必要ありません。ただし、他の暗号化モードではこの限りではありません。 ECB モードで OpenSSL を使用する場合は、IV 長を 0 に設定してください。
OpenSSL を使用して Mcrypt で暗号化されたデータを復号するには、暗号化の前に PKCS#7 による手動パディングが必要です。 。これにより、2 つのライブラリ間の互換性が保証されます。
提供されたコードは、重要な違いと適切なパディング技術を示しています。
$key = "anotherpassword1"; $str = "does it work 12"; // Mcrypt padding $enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB); // OpenSSL padding $enc = openssl_encrypt($str, 'bf-ecb', $key, true); // Decrypt using both methods $dec_mcrypt = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB); $dec_openssl = openssl_decrypt($enc, 'bf-ecb', $key, true); echo bin2hex($enc) . PHP_EOL; var_dump($dec_mcrypt); echo PHP_EOL; var_dump($dec_openssl);
このコードは、暗号化と復号化が成功することを示しています。 Mcrypt と OpenSSL の両方を使用し、互換性のために PKCS#7 パディングを適用します。
以上がMcrypt 暗号化を OpenSSL 暗号化に変換する方法: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。