ホームページ > バックエンド開発 > PHPチュートリアル > PHP でのデータ暗号化のために Mcrypt から OpenSSL に移行するにはどうすればよいですか?

PHP でのデータ暗号化のために Mcrypt から OpenSSL に移行するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-15 16:52:03
オリジナル
481 人が閲覧しました

How to Migrate from Mcrypt to OpenSSL for Data Encryption in PHP?

暗号化のために 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 サイトの他の関連記事を参照してください。

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