Rumah >pembangunan bahagian belakang >tutorial php >Bolehkah OpenSSL Menyahsulit Data Disulitkan dengan Mcrypt?

Bolehkah OpenSSL Menyahsulit Data Disulitkan dengan Mcrypt?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 04:08:151004semak imbas

Can OpenSSL Decrypt Data Encrypted with Mcrypt?

Menaik taraf pustaka penyulitan saya daripada Mcrypt kepada OpenSSL

Bolehkah ia dilakukan?

Keserasian Mcrypt dengan OpenSSL adalah perkara yang perlu diperdebatkan. Sesetengah sumber mendakwa bahawa OpenSSL tidak boleh menyahsulit data yang disulitkan menggunakan Mcrypt, manakala yang lain mencadangkan ia boleh dilakukan dengan penggunaan padding.

[Post 1](https://stackoverflow.com/a/19748494/ 5834657) menyatakan bahawa penyahsulitan adalah mustahil, manakala [Siaran 2](https://stackoverflow.com/a/31614770/5834657) mencadangkan bahawa ia boleh dicapai dengan pelapik yang betul. Walau bagaimanapun, pelapik contoh yang disediakan dalam siaran ditujukan khusus untuk Mcrypt dan mungkin tidak boleh digunakan untuk OpenSSL.

Cuba dengan perpustakaan baharu

Untuk menguji keserasian, kami mengubah suai kod Mcrypt sedia ada kepada gunakan OpenSSL. Fungsi penyahsulitan yang diubah suai berbunyi seperti berikut:

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;
}

Kami menguji kod yang diubah suai ini dengan menyulitkan rentetan dengan perpustakaan Mcrypt dan kemudian cuba menyahsulitnya menggunakan kod berasaskan OpenSSL kami. Bagaimanapun, kami hanya menerima jawapan kosong. Ralat nampaknya berpunca daripada baris $data = $this->unpad($dec). Apabila kami mengulas baris ini, kami mendapat rentetan bercampur aduk yang menyerupai format asal yang disulitkan.

Kesimpulan

Malangnya, percubaan kami untuk menyahsulit data yang disulitkan Mcrypt menggunakan OpenSSL tidak berjaya. Ada kemungkinan bahawa padding khusus yang digunakan oleh Mcrypt tidak serasi dengan OpenSSL atau mungkin terdapat ketidakserasian asas lain yang menghalang penyahsulitan yang berjaya.

Penyiasatan lanjut diperlukan untuk menentukan sama ada benar-benar mustahil untuk menyahsulit yang disulitkan Mcrypt data dengan OpenSSL, atau jika terdapat penyelesaian yang masih belum ditemui.

Atas ialah kandungan terperinci Bolehkah OpenSSL Menyahsulit Data Disulitkan dengan Mcrypt?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn