메뉴 건너뛰기

프로그래밍


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


자바스크립트에서 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);        
 }    
}


그리고 아래와 같이 사용합니다. (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;
}


profile
제목 날짜
[TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... 2 2016.02.20
[TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 2015.04.03
[TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) 3 2016.04.16
홈페이지 주인님 소스에 대한 질문입니다 1 2009.05.12
필요한 모든 파일 합쳐서 하나의 .exe 파일 만들기 2003.08.27
프로세스간 통신을 위한 간단한 팁 2000.08.14
타이머 관련해서 질문 드립니다. 1 2005.10.20
클라이언트에서 서버에 접속시 버전체크후 다운받는루틴 1 2005.10.12
추가질의좀...VESA 확장 바이오스 함수로 화면 전화은 어떻게... 1 2005.06.08
질문]winCE Platformbuilder에관하여 1 2005.05.16
제로보드에 GUNCLIENT 컨트롤 적용하는 방법 2003.12.30
전처리기(Preprocessor) 갖고 놀기 2000.08.03
자작 커널을 위한 인터럽트 벡터 수정 (EZ-2410보드 대상) 2013.05.04
인터넷 익스플로러 툴바(툴밴드) 관련 소스링크 2003.07.23
인터넷 가능한지 알아보기 2004.05.12
위치추적 1 2013.04.06
온라인게임에서 CRC check 차단하는법, 1 2005.12.18
어디에 있는지... 1 2003.07.30
알고리즘 구현...(1) 1999.06.05
시리얼통신관련 질문..(응답속도에 관해..) 1 2006.04.03
시리얼 통신 DCB 셋팅 1 2005.10.05
소스코드에 대한 추가질문입니다^^ 1 2009.05.26
비주얼 C++과 MASM 사용하기 2000.09.07
태그 목록
위로