検索

ホームページ  >  に質問  >  本文

mcrypt_crypt を openssl_crypt に変換するにはどうすればよいですか?

現在廃止されている「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粉287345251P粉287345251448日前610

全員に返信(1)返信します

  • P粉021854777

    P粉0218547772023-09-10 15:21:03

    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
  • キャンセル返事