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

Posted at 2018. 8. 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 | 비밀글로 남기기

[PHP] ERROR : unterminated string literal[PHP] ERROR : unterminated string literal

Posted at 2018. 3. 19. 09:31 | Posted in PHP




■ 에러 : unterminated string literal




기존 코드를 PHP5 버전에서 PHP7 버전으로 옮기고 아파치 버전도 2.4로 올린 환경에서 사용중 발생하였다.


# 소스코드 - 에러가 발생한 경우

<?php
            echo "<script type='text/javascript'>";
            echo "alert('가입되었습니다.\n로그인 페이지로 이동합니다.');";
            echo sprintf("window.location.replace('%s');", $backUrl);
            echo "</script>";
?>




# 출력결과




에러가 발생했던 이유는 \n의 사용중에 문제가 발생하였다.

기존 PHP5버전에서는 위 코드가 잘 작동하였지만 PHP7부터는

unterminated string literal 발생하더라.



# 소스코드 - 에러가 발생하지 않는 경우

<?php
            echo "<script type='text/javascript'>";
            echo "alert('가입되었습니다.\\n로그인 페이지로 이동합니다.');";
            echo sprintf("window.location.replace('%s');", $backUrl);
            echo "</script>";
?>



무언가 설정을 바꿔주면 해결이 될 것으로 생각이 되지만.

그부분이 어디인지는 파악하지 못하였고.

그런 부분을 일부러 건드리기보다는

PHP7버전의 기본적인 설정에 최대한 따르는 것이 좋다고 생각하므로.

앞으로는 \\n을 붙여서 사용하려고 한다.






Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기