복붙노트

PHP 7.2에서 Mcrypt 제거 준비

PHP

PHP 7.2에서 Mcrypt 제거 준비

따라서 mcrypt로 이동하는 시간은 PHP 7.2로 변경됩니다. 물론 대안이 있습니다 : openssl.

mcrypt에서 openssl로 전환하기가 어려우며 AES 256 CBC를 사용하고 IV를 보존하는 것이 어렵습니다. 나는 암호학에 익숙하지 않으므로 모든 것을 실제로 알지는 못한다. 그러나 나는 기본을 이해한다.

다음 코드가 있다고 가정 해 봅시다.

function encrypt($masterPassword, $data) 
{
    $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
    $key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
    return base64_encode($iv . $encrypted);
}

function decrypt($masterPassword, $base64) 
{
    $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
    $data = base64_decode($base64);
    $iv = substr($data, 0, $ivSize);
    $encrypted = substr($data, $ivSize, strlen($data));
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
    return trim($decrypted);
}

이 코드를 mcrypt 대신 openssl을 사용하도록 "변환"할 수 있습니까?

해결법

  1. ==============================

    1.Rijndael-256은 AES-256이 아니며 OpenSSL 확장은 Rijndael-256을 지원하지 않기 때문에 변환 할 수 없습니다. AES-256은 256 비트 (32 바이트) 키가있는 Rijndael-128입니다.

    Rijndael-256은 AES-256이 아니며 OpenSSL 확장은 Rijndael-256을 지원하지 않기 때문에 변환 할 수 없습니다. AES-256은 256 비트 (32 바이트) 키가있는 Rijndael-128입니다.

    불행히도 모든 데이터를 다시 암호화해야합니다.

    편집 : 또한, 당신이 현재 사용하고있는 계획은 몇 가지 문제가 있습니다 :

    좋은 소식은 OpenSSL이 PKCS # 5 패딩을 자동으로 수행하지만 더 나아가서 defuse / php-encryption과 같은 견고한 암호화 라이브러리를 사용해야한다는 것입니다.

  2. from https://stackoverflow.com/questions/42696657/preparing-for-removal-of-mcrypt-in-php-7-2 by cc-by-sa and MIT license