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

Patricia Arquette
Lepaskan: 2024-11-05 07:31:01
asal
625 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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!