Press "Enter" to skip to content

[태그:] 에러

PHP v5.6 이상에서 mcrypt_encrypt() 함수 사용 시 발생하는 에러 해결

mcrypt_encrypt(): Key of size 6 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported in test.php on line 128

암/복호화시 사용하는 mcrypt_encrypt() 함수가 PHP 5.6 이상에서 제약사항이 있습니다.
암/복호화시 사용하는 key의 길이를 16, 24, 32 에 맞게 사용해야 한다는 것입니다.
자릿수가 맞지 않으면 위와 같은 에러메시지를 출력하고 정상적으로 암/복호화 되지 않습니다.

그러면 php v5.6 미만에서 자유로운 길이로 사용하던 key 를 v5.6이상에서 어떻게 처리해야 할까?
다구나 키를 바꾸면 기존에 사용하던 암/복호화 된 문자열을 쓰기가 골치 아파집니다.
요렇게 해봅시다. 짧은 키도 그대로 사용할 수 있습니다.

// 암호화
function ase_encrypt($plainText)
{
    $key = 'mykeys';
    $key = str_pad($key, 16,chr(0));  // Key 자릿수 채우기
    $mode = MCRYPT_MODE_ECB;
    $enc = MCRYPT_RIJNDAEL_128;
    $iv = mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND);

    return strtoupper(bin2hex(mcrypt_encrypt($enc, $key, $plainText, $mode, $iv)));
}
// 복호화
function ase_decrypt($encText)
{
    $key = 'mykeys';
    $key = str_pad($key, 16,chr(0));  // Key 자릿수 채우기
    $mode = MCRYPT_MODE_ECB;
    $enc = MCRYPT_RIJNDAEL_128;
    $iv = mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND);

    $encText = mcrypt_decrypt($enc, $key, pack("H*", $encText), $mode, $iv);

    return rtrim($encText, $encText[strlen($encText)-1]);
}