> 백엔드 개발 > PHP 튜토리얼 > 내 암호화를 Mcrypt에서 OpenSSL로 마이그레이션하고 OpenSSL을 사용하여 Mcrypt로 암호화된 데이터를 해독할 수 있습니까?

내 암호화를 Mcrypt에서 OpenSSL로 마이그레이션하고 OpenSSL을 사용하여 Mcrypt로 암호화된 데이터를 해독할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-05 07:16:11
원래의
874명이 탐색했습니다.

Can I Migrate My Encryption from Mcrypt to OpenSSL, and Decrypt Mcrypt-Encrypted Data Using OpenSSL?

Mcrypt에서 OpenSSL로 암호화 라이브러리 업그레이드

암호화 라이브러리를 Mcrypt에서 OpenSSL로 업그레이드할 수 있나요? OpenSSL에서는 Mcrypt로 암호화된 데이터를 해독할 수 있습니까? 두 개의 서로 다른 게시물이 충돌하는 정보를 제공합니다.

질문: 내 암호화 라이브러리를 Mcrypt에서 OpenSSL로 업그레이드할 수 있습니까? 그렇다면 어떻게 해야 합니까?

답변: 예, 암호화 라이브러리를 Mcrypt에서 OpenSSL로 업그레이드할 수 있습니다.

질문: 업그레이드할 수 있습니까? 다음을 사용하여 Mcrypt로 암호화된 데이터를 해독합니다. OpenSSL?

답변: 예, OpenSSL을 사용하여 Mcrypt로 암호화된 데이터를 해독하는 것이 가능합니다.

다음은 데이터를 해독하는 방법에 대한 코드 예입니다. 다음을 사용하여 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);

    return $dec;
}
로그인 후 복사

추가 참고 사항:

  • openssl_decrypt() 함수를 사용하려면 iv 매개변수가 블록 크기와 길이가 같아야 합니다. 사용되는 암호의 길이입니다.
  • iv 매개변수의 길이가 사용되는 암호의 블록 크기에 따라 CBC 모드에서 openssl_decrypt() 함수를 사용해야 합니다.

테스트:

다음 코드는 decrypt() 함수를 테스트하는 데 사용됩니다:

$keys = [
    'this is a secret key.',
    'G906m70p(IhzA5T&5x7(w0%a631)u)%D6E79cIYJQ!iP2U(xT13q6)tJ6gZ3D2wi&0")7cP5',
    chr(6) . chr(200) . chr(16) . 'my key ' . chr(3) . chr(4) . chr(192) . chr(254) . ' zyx0987!!',
    'and finally one more key to test with here:',
];


$data = [
    'A',
    'This is a test',
    'now test encrypting something a little bit longer with 1234567890.',
    '$length = mcrypt_get_block_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC); $last = ord($data[strlen($data) - 1]);',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet pharetra urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut fringilla, quam sed eleifend eleifend, justo turpis consectetur tellus, quis tristique eros erat at nibh. Nunc dictum neque vel diam molestie fermentum. Pellentesque dignissim dui quis tortor eleifend, ut maximus elit egestas. Donec posuere odio et auctor porta. Quisque placerat condimentum maximus. Curabitur luctus dolor eget sem luctus, in dignissim tortor venenatis. Mauris eget nulla nisl.',
];

$failures = 0;

foreach ($data as $datum) {
    foreach ($keys as $key) {
        $enc = new Encryption(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);

        $encrypted = $enc->encrypt($datum, $key);

        $dec = new EncryptionOpenSsl('bf-cbc');

        $decrypted = $dec->decrypt($encrypted, $key);

        if (strcmp($datum, $decrypted) !== 0) {
            echo "Encryption with key '$key' of '$datum' failed.  '$decrypted' != '$datum'<br><br>\n\n";
            $failures++;
        }
    }
}

if ($failures) {
    echo "$failures tests failed.<br>\n";
} else {
    echo "ALL OKAY<br>\n";
}
로그인 후 복사

위 내용은 내 암호화를 Mcrypt에서 OpenSSL로 마이그레이션하고 OpenSSL을 사용하여 Mcrypt로 암호화된 데이터를 해독할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿