Mcrypt와 OpenSSL의 호환성은 논쟁거리입니다. 일부 소식통에서는 OpenSSL이 Mcrypt를 사용하여 암호화된 데이터를 해독할 수 없다고 주장하는 반면, 다른 소식통에서는 패딩을 사용하면 가능하다고 제안합니다.
[포스트 1](https://stackoverflow.com/a/19748494/ 5834657)에서는 복호화가 불가능하다고 명시하고, [포스트 2](https://stackoverflow.com/a/31614770/5834657)에서는 올바른 패딩을 사용하면 달성할 수 있다고 제안합니다. 그러나 게시물에 제공된 예제 패딩은 Mcrypt 전용이며 OpenSSL에는 적용되지 않을 수 있습니다.
호환성을 테스트하기 위해 기존 Mcrypt 코드를 다음과 같이 수정했습니다. OpenSSL을 사용하세요. 수정된 암호 해독 기능은 다음과 같습니다.
public function decrypt($data, $key) { $salt = substr($data, 0, 128); $enc = substr($data, 128, -64); $mac = substr($data, -64); list ($cipherKey, $macKey, $iv) = $this->getKeys($salt, $key); if ($mac !== hash_hmac('sha512', $enc, $macKey, true)) { return false; } $dec = openssl_decrypt($enc, $this->cipher, $cipherKey, OPENSSL_RAW_DATA, $iv); $data = $this->unpad($dec); return $data; }
Mcrypt 라이브러리로 문자열을 암호화한 다음 OpenSSL 기반 코드를 사용하여 해독을 시도하여 이 수정된 코드를 테스트했습니다. 그러나 우리는 빈 응답만 받았습니다. 오류는 $data = $this->unpad($dec) 행에서 발생한 것으로 보입니다. 이 줄을 주석 처리했을 때 원래 암호화된 형식과 유사한 뒤죽박죽된 문자열을 얻었습니다.
불행히도 OpenSSL을 사용하여 Mcrypt로 암호화된 데이터를 해독하려는 시도는 성공하지 못했습니다. Mcrypt에서 사용하는 특정 패딩이 OpenSSL과 호환되지 않거나 성공적인 해독을 방해하는 다른 기본 비호환성이 있을 수 있습니다.
Mcrypt로 암호화된 암호를 해독하는 것이 실제로 불가능한지 확인하려면 추가 조사가 필요합니다. OpenSSL을 사용하여 데이터를 수집하거나 아직 발견되지 않은 해결 방법이 있는 경우.
위 내용은 OpenSSL이 Mcrypt로 암호화된 데이터를 해독할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!