메뉴 건너뛰기

프로그래밍


웹앱 등에서 활용할만 한 팁을 정리해 봅니다.


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

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


- 자바스크립트에서 암호화 하는 방법 (Encrypt data with 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);	
}


- PHP에서 복호화 하는 방법 (Decrypt data with Javascript)


우선 아래와 같이 클래스를 만듭니다. (First, make a class for decryption)

class AESCrypt
{	
 var $skey;
 var $iv;
    		  	  					
 function setKey($KEY, $IV)
 {
  $this->skey = $KEY;	
  $this->iv = $IV;	
 }

 function decrypt ($value)        
 {            	        
  $value = base64_decode($value);
  $output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->skey, $value, MCRYPT_MODE_CBC, $this->iv) ;					    
  $valueLen = strlen($output) ;

  if ( $valueLen % 16 > 0 )
   $output = "";
  
  $padSize = ord ($output{$valueLen - 1}) ;
  if ( ($padSize < 1) or ($padSize > 16) )
   $output = "";                // Check padding.                
					
  for ($i = 0; $i < $padSize; $i++)
  {
   if ( ord ($output{$valueLen - $i - 1}) != $padSize )
    $output = "";
  }

  $output = substr ($output, 0, $valueLen - $padSize);					    
					    					    					
  return $this->filter($output);        
 }    

 function filter($par)
 {
     $par = htmlspecialchars($par);
     $par = strip_tags($par);
     $par = mysql_real_escape_string($par);
     $par = str_replace("'","\"",$par);
     $par = str_replace("`","\"",$par);
     $par = $par.trim();

     return $par;
   }
}


그리고 아래와 같이 사용합니다. (Decrypt data with PHP)

$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;
}





번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [22] 파이팅건맨 2016.02.20 57987
공지 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 8914
공지 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 8613
» [TIP] 자바스크립트와 PHP코드간에 암호화 통신하기 (Encrypt with Javascript, Decrypt with PHP) [2] 파이팅건맨 2017.03.16 2767
142 [TIP] GUNMAN의 영화 점수 테이블을 이용한 딥러닝 예제 파이팅건맨 2017.02.15 741
141 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 5749
140 [TIP] 네이버 영화 정보와 전문가 평점 얻어오기 파이팅건맨 2017.02.10 4427
139 [TIP] 네이버 오픈 API를 로컬 PC에서 호출하기 파이팅건맨 2017.02.01 2034
138 [TIP] php로 기상청에서 제공하는 기상정보 API 호출하기 파이팅건맨 2017.01.17 5854
137 [TIP] node 에서 Basic authentication 인증과 함께 http, https 요청하기 파이팅건맨 2016.09.01 833
136 [TIP] node의 lambda-local 테스트 팁 파이팅건맨 2016.08.19 677
135 [TIP] 데이터를 Node에서 암호화하고 PHP에서 복호화 하기 파이팅건맨 2016.08.19 627
134 [TIP] Docker상의 Syntaxnet 결과 포맷을 수정하기 파이팅건맨 2016.08.07 1556
133 [TIP] SyntaxNet을 Windows에서 실행하기 [1] 파이팅건맨 2016.05.25 854
132 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 8914
131 [TIP] 파이선으로 TED에서 가장많이 사용된 단어들 줄세우기 파이팅건맨 2016.04.03 1340
130 [TIP] 파이선에서 구글 스프레드시트 사용하기 [5] 파이팅건맨 2016.03.27 4258
129 [TIP] 파이선에서 리스트를 사용하는 재미있는 예제 파이팅건맨 2016.03.15 656
128 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [22] 파이팅건맨 2016.02.20 57987
127 [TIP] 퍼포먼스를 높여주는 몇가지 코딩 예 파이팅건맨 2016.01.22 496
126 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 8613
125 [TIP] 자작 커널을 위한 인터럽트 벡터 수정 (EZ-2410보드 대상) 파이팅건맨 2013.05.04 621
124 위치추적 [1] 우람사랑 2013.04.06 466
위로