KG이니시스 결제 프로그램 PHP 7.2 버전 이상 암복호화 오류 수정

libs/INICls.php 파일에 보면 암복호화 메소드가 들어있다.


function SymmEncrypt($src_data, &$enc_data, $key, $iv) {

    $size = mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC);

    $src_data = $this->pkcs5_pad($src_data, $size);

    $cipher = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

    mcrypt_generic_init($cipher, $key, $iv);

    $enc_data = mcrypt_generic($cipher, $src_data);

    mcrypt_generic_deinit($cipher);

    mcrypt_module_close($cipher);


    if (!$enc_data)

        return ENC_FINAL_ERR;

    $enc_data = Base64Encode($enc_data);


    return OK;

}


function SymmDecrypt($enc_data, &$dec_data, $key, $iv) {

    $cipher = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

    mcrypt_generic_init($cipher, $key, $iv);

    $dec_data = mdecrypt_generic($cipher, $enc_data);

    mcrypt_generic_deinit($cipher);

    mcrypt_module_close($cipher);


    if (!$dec_data)

        return false;

    $dec_data = $this->remove_ctrl($dec_data);

    return true;

}


위 두 함수는 PHP 7.2 버전 이상일 경우 오류로 인해 실행이 되지 않는다.

이유는 mcrypt 관련 함수가 PHP 7.2 버전 에서 부터 제거가 되어 없어졌기 때문이다.

대체 함수로 openSSL 함수를 이용할 수 있다.


위 메소드를 openSSL 함수로 변경해야 한다.


아래처럼 변경 시 정상작동 됨을 PHP 7.2.0 버전에서 확인했다.(이니시스 결제 취소에서 확인)

단 아래처럼 했을 때 문제가 발생 할 수도 있기 때문에 필히 적용 전 테스트를 해서 정상작동 여부를 확인해야 한다.

또한 기존 소스는 주석처리해서 보관해 두길 추천한다.


function SymmEncrypt($src_data, &$enc_data, $key, $iv) {

    $method = 'des-ede3-cbc';

    $block_size = strlen(openssl_encrypt($src_data, $method, $key, OPENSSL_RAW_DATA, $iv));

    //$enc_data = openssl_encrypt($this->pkcs5_pad($src_data, $block_size), $method, $key, OPENSSL_RAW_DATA, $iv);

    $enc_data = openssl_encrypt($src_data, $method, $key, OPENSSL_RAW_DATA, $iv);


    if (!$enc_data)

        return ENC_FINAL_ERR;

    $enc_data = Base64Encode($enc_data);


    return OK;

}


function SymmDecrypt($enc_data, &$dec_data, $key, $iv) {

    $dec_data = openssl_decrypt($enc_data, 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, $iv);


    if (!$dec_data)

        return false;

    $dec_data = $this->remove_ctrl($dec_data);

    return true;

}

+ Recent posts