MCrypt를 사용하여 PHP에서 AES 암호화 해독
이 시나리오에서 비밀번호는 JavaScript의 CryptoJS를 사용하여 암호화되며 다음에서 해독되어야 합니다. MCrypt를 사용하는 PHP를 사용하는 서버 측. 이를 달성하는 방법은 다음과 같습니다.
MCrypt의 mcrypt_decrypt() 함수를 사용하여 암호를 해독하려는 이전 시도는 키 생성의 차이로 인해 실패했습니다. CryptoJS는 비밀번호를 사용하여 AES 키와 초기화 벡터(IV)를 모두 생성하는 반면 MCrypt는 암호화/복호화에만 키를 사용합니다.
이를 해결하려면, CryptoJS와 동일한 방법을 사용하여 PHP에서 키와 IV를 파생해야 합니다. 다음은 이 목적을 위한 사용자 정의 evpKDF() 함수입니다:
<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") { // Code goes here... }</code>
evpKDF() 함수를 사용하려면 JavaScript의 암호화된 비밀번호에 생성된 솔트가 포함되어야 합니다. 업데이트된 CryptoJS 코드는 다음과 같습니다.
<code class="javascript"> var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase"); var ivHex = encryptedPassword.iv.toString(); var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize var keySize = encryptedPassword.algorithm.keySize; var keyHex = encryptedPassword.key.toString(); var saltHex = encryptedPassword.salt.toString(); // must be sent var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent</code>
PHP의 서버 측에서 요청에서 솔트 및 암호문을 검색합니다. 그런 다음 evpKDF() 함수를 사용하여 비밀번호와 솔트를 기반으로 키와 IV를 파생시킵니다.
<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex));</code>
마지막으로 MCrypt를 사용하여 암호 해독을 수행합니다.
<code class="php">$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $keyAndIV["key"], hex2bin($cipherTextHex), MCRYPT_MODE_CBC, $keyAndIV["iv"]);</code>
이렇게 하면 성공적으로 암호가 해독됩니다. AES와 함께 CryptoJS를 사용하여 암호화된 비밀번호입니다. 또한 MCrypt를 대체하는 OpenSSL 확장 기능을 사용하는 버전도 제공됩니다.
위 내용은 evpKDF()를 사용하여 MCrypt로 PHP에서 AES 암호화를 해독하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!