ホームページ >バックエンド開発 >PHPチュートリアル >OpenSSL は Mcrypt で暗号化されたデータを復号化できますか?

OpenSSL は Mcrypt で暗号化されたデータを復号化できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 04:08:15996ブラウズ

Can OpenSSL Decrypt Data Encrypted with Mcrypt?

暗号化ライブラリを Mcrypt から OpenSSL にアップグレードしています

実行できますか?

Mcrypt と OpenSSL の互換性については議論の余地があります。一部の情報源では、OpenSSL は Mcrypt を使用して暗号化されたデータを復号化できないと主張していますが、他の情報源では、パディングを使用すれば復号化が可能であると示唆しています。

[Post 1](https://stackoverflow.com/a/19748494/) 5834657) は復号化が不可能であると述べていますが、[Post 2](https://stackoverflow.com/a/31614770/5834657) は、適切なパディングで達成可能であることを示唆しています。ただし、投稿で提供されているパディングの例は Mcrypt 専用であり、OpenSSL には適用できない可能性があります。

新しいライブラリを使用して試みます

互換性をテストするために、既存の Mcrypt コードを次のように変更しました。 OpenSSLを使用します。変更された復号化関数は次のようになります:

public function decrypt($data, $key) {
    $salt = substr($data, 0, 128);
    $enc = substr($data, 128, -64);
    $mac = substr($data, -64);

    list ($cipherKey, $macKey, $iv) = $this->getKeys($salt, $key);

    if ($mac !== hash_hmac('sha512', $enc, $macKey, true)) {
         return false;
    }

    $dec = openssl_decrypt($enc, $this->cipher, $cipherKey, OPENSSL_RAW_DATA, $iv);

    $data = $this->unpad($dec);

    return $data;
}

この変更されたコードをテストするには、Mcrypt ライブラリで文字列を暗号化し、OpenSSL ベースのコードを使用して復号化を試みます。しかし、空返事しか返ってこない。エラーは $data = $this->unpad($dec) 行から発生しているようです。この行をコメントアウトすると、元の暗号化形式に似たごちゃ混ぜの文字列が得られました。

結論

残念ながら、OpenSSL を使用して Mcrypt で暗号化されたデータを復号化する試みは失敗しました。 Mcrypt で使用される特定のパディングが OpenSSL と互換性がない可能性や、正常な復号化を妨げる他の根本的な非互換性がある可能性があります。

Mcrypt で暗号化された暗号化を復号化することが本当に不可能であるかどうかを判断するには、さらなる調査が必要です。 OpenSSL を使用したデータ、またはまだ発見されていない回避策がある場合。

以上がOpenSSL は Mcrypt で暗号化されたデータを復号化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。