336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

로그인 시 암호화 후 복호화하는 것을 java로 정리했었는데, PHP로도 같은 내용을 정리해둔다.

 

자바스크립트와 PHP코드간에 암호화 통신하기 (Encrypt with Javascript, Decrypt with PHP)

 

자바스크립트에서 CryptoJS 라이브러리를 이용해 데이터를 암호화를 하고 PHP에서 복호화 하는 예제입니다.

(This is the way how to encrypt data with Javascript and decrypt it with PHP)

 

 

1) CryptoJS 다운로드

 

https://code.google.com/archive/p/crypto-js/downloads

 

 

2) JAVASCRIPT

 

var key = CryptoJS.enc.Hex.parse("1234567811111111abcdefabcd123123");

var iv =  CryptoJS.enc.Hex.parse("abcd1231231234567811111111abcdef");   

 

function Encrypt(value) {       

    var encrypted = CryptoJS.AES.encrypt(value, key, {iv:iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});

    encrypted = encrypted.ciphertext.toString(CryptoJS.enc.Base64);

    return encodeURIComponent(encrypted);   

}

 

 

3) PHP

 

class AESCrypt

{   

   var $skey;

   var $iv;

                                     

   function setKey($KEY, $IV)

   {

       $this->skey = $KEY;    

       $this->iv = $IV;   

   }

 

   function decrypt ($value)        

   {                      

       $value = base64_decode($value);

 

       // PHP7.2 이상부터 DEPRECATED

       //$output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->skey, $value, MCRYPT_MODE_CBC, $this->iv) ;         

       $output = openssl_decrypt($value, 'AES-128-CBC', $this->skey, OPENSSL_RAW_DATA, $this->iv);

       $output = $this->pkcs5_unpad($output); 

                                             

       return $this->filter($output);        

   }    

 

    function pkcs5_unpad($text) 

    {

        if(is_empty($text)) {

            return $text;

        }

        $len = strlen($text);

        $pad = ord( $text[$len-1] );

        if ($pad > $len) {

          return $text;

        }

        if (!strspn($text, chr($pad), $len - $pad)) {

          return $text;

        }

        return substr($text, 0, -1 * $pad);

    }

 

   function filter($par)

   {

       $par = htmlspecialchars($par);

       $par = strip_tags($par);

 

       // PHP7.0 이상부터 DEPRECATED

       // mysqli_real_escape_string을 사용하거나 xss clean하기 (필자는 CI의 xss clean처리)

       //$par = mysql_real_escape_string($par);

       

       $par = str_replace("'","\"",$par);

       $par = str_replace("`","\"",$par);

       $par = trim($par);

 

       return $par;

   }

}

 

$mcrypt = new AESCrypt();

$key = attemptpack("1234567811111111abcdefabcd123123");

$iv =  attemptpack("abcd1231231234567811111111abcdef");

$mcrypt->setKey($key,$iv);

 

// Decryption

$mydata = $mcrypt->decrypt($_GET['data']);

 

function attemptpack($s) {                

    $p=pack("H*", $s);                

    return $p;

}

 

참조 : http://airpage.org/xe/language_data/23044

참조 : https://gracefullight.dev/2017/07/07/PHP-7-1%EC%97%90%EC%84%9C-mcrypt-%EB%8C%80%EC%B2%B4%ED%95%98%EA%B8%B0/

참조 : https://yoshikixdrum.tistory.com/184 

posted by 어린왕자악꿍