BOARD

문제 해결

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

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 6회 작성일 26-09-12 18:03

본문

문제 원인

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의 호환성을 반드시 사전에 테스트해야 합니다. 변경 후에는 정상적으로 암호화 및 복호화가 수행되는지 실제 결과 값을 확인합니다.

댓글목록

등록된 댓글이 없습니다.