[PHP] mcrypt 방식 OpenSSL 방식으로 대체하기[PHP] mcrypt 방식 OpenSSL 방식으로 대체하기

Posted at 2018.08.30 10:56 | Posted in PHP





참고 : https://gracefullight.github.io/2017/07/07/PHP-7-1에서-mcrypt-대체하기/




실제 업무중 API 연결과정정중에 문제가 발생하였다.


보안문제로 mcrypt 방식은 사용하지 않기로 하였기때문에 OpenSSL 방식으로 대체하여 해결 하였고.


그 방법은 아래와 같다.




# 암호화(Encrypt)


mcrypt 방식

 $output = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $val, MCRYPT_MODE_CBC, str_repeat (chr (0), 16));



    /**
    * AES256 암호화 *
    * @param unknown $key 암호화키
    * @param unknown $value 전달받은 데이터
    * @return string
    */






$output = openssl_encrypt(pkcs5_unpad($val), "AES-256-CBC", $key, OPENSSL_RAW_DATA, str_repeat(chr(0), 16));




---------------------------------------------------------------------------------------------------------------




$output = openssl_encrypt(pkcs5_unpad($value), "AES-256-CBC", $key, OPENSSL_RAW_DATA, str_repeat(chr(0), 16));


---------------------------------------------------------------------------------------------------------------


    /**
    * AES256 복호화 *
    * @param unknown $key 복호화 키
    * @param unknown $value 전달받은 데이터
    * @return string
    */


$output = pkcs5_pad(openssl_decrypt($value, "AES-256-CBC", $key, OPENSSL_RAW_DATA, str_repeat(chr(0), 16)));



-----------------------------------------------------------------------------------------------------------------



    /**
    * 패딩 알고리즘
    * mcrypt방식에서 openssl 방식으로 변환을 위한 추가 함수
    */
    function pkcs5_pad($text, $blocksize = 16) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text.str_repeat(chr($pad), $pad);
    }

    function pkcs5_unpad($text) {
        $pad = ord($text{strlen($text)-1});
        if($pad > strlen($text)) {
            return $text;
        }
        if(!strspn($text, chr($pad), strlen($text) - $pad)) {
            return $text;
        }
        return substr($text, 0, -1 * $pad);
    }






Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기