mcrypt_crypt を openssl_crypt に変換するにはどうすればよいですか?
P粉287345251
P粉287345251 2023-09-09 17:35:02
0
1
608

現在廃止されている「mcrypt」を使用する特定の WordPress プラグインを改善したいと考えています。代わりに、OpenSSL ライブラリを使用して送信されたデータを暗号化したいのですが、暗号化プロセス中に問題が発生します。つまり、openssl_encrypt 関数が mcrypt_encrypt とは異なる値を返し、接続しているシステムが正しいデータを返しません。値があり、その所有者は私がアップロードしたコンテンツのログを私に送信できません:(

インターネット全体を検索しましたが、まだ解決策が見つかりません。パディングに問題があると思われますが、解決策が見つかりません。手伝ってくれますか?

以下は、PHP オブジェクト $password、$salt、$iv

内の明らかな変更です。 リーリー

言い忘れました: OPENSSL_ZERO_PADDING はエラーを返します。 OPENSSL_RAW_DATA を使用すると、mcrypt_encrypt と同様の結果が得られますが、末尾が異なります。例:

OpenSSL: rPzVvF7gaPMA4ADAjHUW8Wy1ThTJG+VPdcz5iKAkAwrDTTFTcOpWgWOCh9l9JFZ8WcNzMJ868026TkUxcYJMrQ==

MCRYPT:rPzVvF7gaPMA4ADAjHUW8Wy1ThTJG+VPdcz5iKAkAwrDTTFTcOpWgWOCh9l9JFZ8UGVfF091Q9bY61mTRg+BSg==

P粉287345251
P粉287345251

全員に返信(1)
P粉021854777

encryptSSL() では、Base64 エンコードは現在、デフォルトで明示的に 1 回、暗黙的に 1 回の計 2 回使用されています。したがって、明示的か暗黙的かにかかわらず、Base64 エンコーディングの 1 つを削除する必要があります。前者は base64_encode() 呼び出しを削除することで実現され、後者は OPENSSL_RAW_DATA フラグを設定することで実現されます。

さらに、mcrypt はゼロ パディングを使用し、PHP/OpenSSL は PKCS#7 パディングを使用します。したがって、encryptSSL()encryptMCRYPT() と同じ結果を得るには、ゼロ パディングを使用する必要があります。 PHP/OpenSSL はゼロ パディングをサポートしていないため、PKCS#7 パディングを無効にし (OPENSSL_ZERO_PADDING フラグを使用)、ゼロ パディングを明示的に実装する必要があります>.

###全体:### リーリー ###そして:### リーリー

これらの変更により、両方の関数で同じ結果が得られます。

ゼロ パディングは PKCS#7 パディングよりも信頼性が低いことに注意してください。

###安全性:###

静的 IV と静的ソルトはバグであることに注意してください。代わりに、両方がランダムに生成され、暗号文とともに、通常は連結されて復号化パーティに渡されます (どちらも秘密ではありません)。

また、PBKDF2 の反復回数 100 は通常、少なすぎます。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート