CryptoJS를 사용하여 JavaScript로 암호화된 비밀번호를 복호화하고 mcrypt_decrypt()를 사용하여 PHP 서버에서 비밀번호를 복호화하려고 하면 해독된 비밀번호가 손상되는 문제가 발생했습니다. 이는 mcrypt_decrypt()에 제공된 매개변수가 올바르지 않기 때문입니다.
이 문제를 해결하려면 CryptoJS와 mcrypt_decrypt()가 암호화를 처리하는 방식의 차이점을 이해해야 합니다. CryptoJS는 var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase")에 제공된 암호를 사용하여 AES 암호화를 위한 암호화 키와 초기화 벡터(IV)를 모두 생성합니다.
반면, mcrypt_decrypt()는 암호문을 암호화 키로만 사용합니다. 즉, PHP에서 암호문을 성공적으로 해독하려면 CryptoJS와 동일한 방식으로 키와 IV를 파생시켜야 합니다.
다음 코드는 이 문제를 해결하는 방법을 보여줍니다.
<code class="php">$saltHex = $_POST['salt']; // Received from the JavaScript request $ciphertextHex = $_POST['ciphertext']; // Received from the JavaScript request // Convert salt from hex to binary $salt = hex2bin($saltHex); function evpKDF($password, $salt, $keySize, $ivSize) { $hasher = hash_init('sha256'); hash_update($hasher, $password); hash_update($hasher, $salt); $derivedBytes = hash_final($hasher, TRUE); return array( "key" => substr($derivedBytes, 0, $keySize), "iv" => substr($derivedBytes, $keySize, $ivSize) ); } // Derive key and IV from passphrase and salt $keyAndIV = evpKDF("Secret Passphrase", $salt, 16, 16); // Decrypt ciphertext using mcrypt_decrypt() $decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $keyAndIV["key"], hex2bin($ciphertextHex), MCRYPT_MODE_CBC, $keyAndIV["iv"]);</code>
CryptoJS와 동일한 방식으로 키와 IV를 파생함으로써 복호화 프로세스가 올바르게 수행되고 복호화된 비밀번호가 정확한지 확인할 수 있습니다.
위 내용은 PHP에서 CryptoJS로 암호화된 비밀번호를 해독하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!