Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyahsulit Kata Laluan Tersulit CryptoJS dalam PHP Menggunakan mcrypt?

Bagaimana untuk Menyahsulit Kata Laluan Tersulit CryptoJS dalam PHP Menggunakan mcrypt?

Patricia Arquette
Patricia Arquetteasal
2024-11-05 07:31:01628semak imbas

How to Decrypt CryptoJS Encrypted Passwords in PHP Using mcrypt?

Menyahsulit Kata Laluan Tersulit CryptoJS dalam PHP Menggunakan mcrypt

Pernyataan Masalah

Dalam JavaScript, kata laluan pengguna yang disulitkan sedang dibuat menggunakan CryptoJS, menggunakan kata laluan- terbitan kunci berasaskan untuk kedua-dua kunci dan IV. Walau bagaimanapun, percubaan penyahsulitan pada pelayan PHP, menggunakan perpustakaan mcrypt, telah gagal, mengakibatkan rentetan dekripsi yang tidak masuk akal.

Penyelesaian

Ralat utama berpunca daripada kaedah penyulitan yang berbeza yang digunakan dalam JavaScript (CryptoJS ) dan PHP (mcrypt). Dalam CryptoJS, kunci dan IV diperoleh daripada kata laluan, manakala mcrypt bergantung sepenuhnya pada kata laluan untuk penyulitan/penyahsulitan. Untuk membetulkannya, kunci dan IV mesti dijana dalam PHP menggunakan teknik yang serupa dengan yang digunakan dalam CryptoJS.

Kod JavaScript yang disemak

Memindahkan parameter saltHex dan cipherTextHex ke pelayan PHP, dan proses penyulitan JavaScript yang dipertingkatkan kini dilaksanakan:

<code class="javascript">var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
var ivHex = encryptedPassword.iv.toString();
var saltHex = encryptedPassword.salt.toString(); 
var cipherTextHex = encryptedPassword.ciphertext.toString();</code>

Terbitan Kunci dan IV dalam PHP

Fungsi PHP berikut memperoleh kunci dan IV daripada kata laluan dan garam:

<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") {
    /* ... code for key and IV derivation ... */
    return [
        "key" => substr($derivedBytes, 0, $keySize * 4),
        "iv"  => substr($derivedBytes, $keySize * 4, $ivSize * 4)
    ];
}</code>

Penyahsulitan dalam PHP menggunakan mcrypt

Berbekalkan kunci terbitan dan IV, penyahsulitan dilakukan dalam PHP:

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

Penyahsulitan dalam PHP menggunakan OpenSSL (kaedah alternatif)

Menggunakan sambungan OpenSSL ialah alternatif untuk penyahsulitan:

<code class="php">$decryptPassword = openssl_decrypt(
        substr($ciphertext, 16), 
        "aes-256-cbc",
        $keyAndIV["key"], 
        OPENSSL_RAW_DATA, 
        $keyAndIV["iv"]);</code>

Dengan pengubahsuaian ini, penyulitan lancar dan penyahsulitan kata laluan pengguna kini boleh dicapai antara JavaScript dan PHP, memastikan pengendalian data selamat.

Atas ialah kandungan terperinci Bagaimana untuk Menyahsulit Kata Laluan Tersulit CryptoJS dalam PHP Menggunakan 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