PHP 버전 업그레이드에 따른 mcrypt 암호화 함수 openssl 마이그레이션 방법
페이지 정보

본문
문제 원인
PHP 7.1.0 버전부터 mcrypt 함수군은 더 이상 권장되지 않으며, PHP 7.2.0 버전부터는 완전히 제거되었습니다. 이로 인해 기존에 mcrypt_encrypt 및 mcrypt_decrypt를 사용하던 코드는 PHP 7.2 이상 환경에서 치명적인 오류를 발생시키게 됩니다.
확인 과정
사용 중인 서버의 PHP 버전을 확인하고, 소스 코드 내에서 mcrypt_encrypt 또는 mcrypt_decrypt 함수를 호출하고 있는지 점검해야 합니다. PHP 7.2 이상 환경에서는 해당 함수가 존재하지 않으므로 openssl 확장 모듈을 기반으로 한 암호화 방식으로 전환이 필요합니다.
해결 방법
코드 또는 설정 변경 전 반드시 기존 파일을 백업하여 원상 복구할 수 있는 준비를 갖춘 뒤 작업을 진행합니다. openssl_encrypt와 openssl_decrypt 함수를 사용하여 AES-128-CBC 방식으로 양방향 암호화 및 복호화를 수행하도록 코드를 수정합니다. PHP 5.x 환경과 PHP 7.x/8.x 환경 간에는 함수 인자 전달 순서가 달라질 수 있으므로 아래 예시와 같이 파라미터 위치를 검토하여 구현해야 합니다.
if (!function_exists('hex2bin')) { function hex2bin($hexdata) { $bindata=""; for ($i=0;$i 0 ) $value = ""; $padSize = ord ($value{$valueLen - 1}); if ( ($padSize < 1) or ($padSize > 16) ) $value = ""; for ($i = 0; $i < $padSize; $i++) { if ( ord ($value{$valueLen - $i - 1}) != $padSize ) $value = ""; } return substr($value, 0, $valueLen - $padSize); } } if (!function_exists('encrypt')) { function encrypt ($key, $value, $IV) { if ( is_null ($value) ) $value = ""; $value = toPkcs7 ($value); $output = openssl_encrypt($value, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $IV); return base64_encode ($output); } } if (!function_exists('decrypt')) { function decrypt ($key, $value, $IV) { if ( is_null ($value) ) $value = ""; $value = base64_decode ($value) ; $output = openssl_decrypt($value, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $IV); return fromPkcs7 ($output); } }주의사항 및 점검
기존 mcrypt로 암호화된 데이터를 openssl로 복호화할 경우, 패딩 방식(PKCS7)과 IV 처리 방식이 동일해야 합니다. mcrypt의 MCRYPT_RIJNDAEL_128은 openssl의 AES-128-CBC와 매핑하여 사용할 수 있으나, 기존 데이터 복호화 시 키와 IV의 호환성을 반드시 사전에 테스트해야 합니다. 변경 후에는 정상적으로 암호화 및 복호화가 수행되는지 실제 결과 값을 확인합니다.
- 이전글PHP 7.2 이상 버전에서 each() 함수 오류 해결 및 foreach 대체 방법 26.09.12
- 다음글그누보드 모바일 테마 tail.php 및 CSS 수정 경로 26.09.12
댓글목록
등록된 댓글이 없습니다.