Bagaimana untuk Menyahsulit JavaScript CryptoJS AES Data Disulitkan dalam PHP?

Mary-Kate Olsen
Lepaskan: 2024-11-02 11:09:31
asal
192 orang telah melayarinya

How to Decrypt JavaScript CryptoJS AES Encrypted Data in PHP?

Penyulitan dalam JavaScript dan Penyahsulitan dalam PHP

Isu

Seorang pengguna sedang menyulitkan kata laluan dalam JavaScript menggunakan penyulitan CryptoJS AES dan cuba menyahsulitnya dalam PHP menggunakan mcrypt_decrypt() tetapi menemui keputusan yang salah.

Penyelesaian

Percanggahan timbul daripada kaedah yang digunakan untuk memperoleh kunci penyulitan dan vektor permulaan (IV) dalam JavaScript dan PHP. CryptoJS memperoleh nilai ini menggunakan kata laluan, manakala mcrypt_decrypt() PHP hanya mengharapkan kunci.

Pelaksanaan Penyahsulitan PHP

Untuk menyahsulit teks sifir dengan betul, kod PHP mesti memperoleh kunci penyulitan dan IV daripada kata laluan dan garam dengan cara yang sama seperti kod JavaScript. Ini boleh dicapai menggunakan fungsi seperti evpKDF(), yang melaksanakan fungsi terbitan kunci berasaskan cincang (HKDF).

<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") {
    // ... Implementation ...
}</code>
Salin selepas log masuk

Setelah kunci dan IV diperoleh, mcrypt_decrypt() boleh digunakan seperti berikut :

<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex));
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, 
        $keyAndIV["key"], 
        hex2bin($cipherTextHex), 
        MCRYPT_MODE_CBC, 
        $keyAndIV["iv"]);</code>
Salin selepas log masuk

Pelaksanaan Alternatif menggunakan OpenSSL

Sebagai alternatif, sambungan OpenSSL boleh digunakan untuk menyahsulit teks sifir:

<code class="php">function decrypt($ciphertext, $password) {
    $ciphertext = base64_decode($ciphertext);
    if (substr($ciphertext, 0, 8) != "Salted__") {
        return false;
    }
    $salt = substr($ciphertext, 8, 8);
    $keyAndIV = evpKDF($password, $salt);
    $decryptPassword = openssl_decrypt(
            substr($ciphertext, 16), 
            "aes-256-cbc",
            $keyAndIV["key"], 
            OPENSSL_RAW_DATA, // base64 was already decoded
            $keyAndIV["iv"]);

    return $decryptPassword;
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menyahsulit JavaScript CryptoJS AES Data Disulitkan dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!