블로그 프로필 이미지

SMALL




☞ 암호화 클래스란?


 암호화 클래스란, PHP 에서 처리되는 데이터를 암호화시켜주는 클래스이다. PHP 에서 제공되는 MD5 또는 SHA1 처럼 생각할 수 있으나, CI에서 암호화클래스는 이런 암호화 뿐만 아니라 이보다 더 높은 기술을 가진 암호화 기술들이 제공되기 때문에 상당히 유용한 클래스로 볼 수 있다. 또한 데이터 암호화 뿐만 아니라 복호화도 지원이 되기 때문에, 사용자들에게 보여지는 민감한 데이터를 암호화시켜 보안을 높일 수 있다. 


 암호화 클래스에서는 기본적으로 2가지의 방법이 제공된다고 메뉴얼에 기재되어있는데 이는 Mcrypt 라이브러리 와 랜덤해쉬 XOR 인코딩 방법들이다. 하지만 Mxrypt 라이브러리 같은 경우 서버에서 사용이 불가능하다면, 암호화된 메세지는 암호화세션 또는 적절한 수준의 보안을 제공한다고 나와있다. 뭐 높은 보안을 요구하지 않는이상 이부분에 대해서는 크게 신경 쓸 필요는 없을 듯하다.




☞ 암호화 클래스의 사용


 우선적으로 암호화 클래스를 사용하기 전에 CI 메뉴얼을 확인해 보면 알겠지만, 사용자의 암호를 저장할 시 CI 의 암호화 함수나 다른 암호화 함수를 사용해선 안되며 꼭 해시되어야 한다고 나와있다. 이말은 쉽게 말해 사용자의 암호같이 고정된 데이터의 처리를 CI의 암호화 클래스를 사용하여 암호화를 실행한다면 키값이 변할 시 그값은 틀린값으로 나와서 제대로된 비교를 할 수 없으며, 사용자 암호같은 경우 사용자들이 해당 싸이트를 신뢰할 수 있어야하는데, 복호화가 이루어 지는 싸이트는 사용자들의 암호의 원문을 알 수 있기때문에 사용지들이 신뢰할 수 없게 되므로 사용자 암호는 꼭 해시 함수를 사용하라는 뜻이다.


 암호화 클래스에는 암호화를 시킬 시 키값을 받게 되는데 이 키값은 암호화된 문자열을 복호화 시킬 시 필요한 작은 정보조각이다. 키값 설정에 대한 자세한 설명은 CI의 메뉴얼에 상세히 기재되어있다. 결론만 말하자면, 키값은 영속적이고 고정적인 데이터를 사용할 시 에는 절대 키값을 변경해선 안되며, 키값의 장점을 최대한 활용하기 위해선 키값의 보안이 절대적으로 이루어져야 하며, 키값의 길이는 영문 기준으로 32글자(128)로 대문자와 소문자가 섞인 랜덤 문자열을 사용하는게 좋다는 것이다.


 키값의 설정같은 경우 CI의 기본경로인 application/config/config.php 파일에서 아래와 같은 항목을 통해 기본값으로 사용할 키 값을 설정할 수 있으며, 기본 설정값이 아닌 따로 구성된 키값 리스트들을 이용하여 암호화 복호화 시 각 함수의 인자값으로 키값을 설정해 줄 수 있다. 


 암호화 클래스 기본 키값 환경설정 (application/config/config.php)


$config['encryption_key'] = bin2hex("abcdefghijklmnop");


 위에서 사용된 bin2hex 함수는 입력받은 데이터를 16진수로 변환시켜주는 함수이다. 따라서 위에서 언급된 키값 규칙중 글자의 수는 32글자를 입력해야 하지만, bin2hex 함수를 사용한다면 16글자만 입력하면 되기 때문에, 글자의 수를 덜어주면서 키값의 질을 한층 높여주는 결과를 얻을 수 있다. 여기서 한가지 주의할점은 영문 또는 숫자아닌 다른 문자입력하면, 제대로된 글자수의 키값을 얻을 수 없기때문에, bin2hex 함수를 사용할 시 항상 영문과 숫자를 사용해야 한다.

 

 암호화 클래스의 함수같은 경우 CI 의 메뉴얼에 상세히 나와있기때문에 이곳에는 따로 자세히 작성하지는 않겠다. 한가지 주의할점은 CI 의 버전이 3.0 으로 넘어오면서 암호화 클래스명과 몇가지 함수들의 기능이나, 함수명들이 변경되거나 추가되었기때문에 CI의 버전별로 메뉴얼을 잘 확인하여야한다. 나같은 경우 CI .2X 를 사용하다가 CI 3.0으로 갈아타면서 변경된 암호화 클래스의 함수들을 확인 못하고, 삽질을 한 경우가 있었다. 


 아래는 CI 의 버전별로 간단한 사용방법 예제이다. 위에서도 말했다시피 버전별로 다른 부분이 많이 있기때문에 CI의 메뉴얼을 참고하는게 좋다. 


 암호화 클래스 간단한 사용예제1 (CI 2.X)


<?php
/* 암호화 클래스 로드 */
$this->load->library('encrypt');

/* 암호화할 데이터 */
$msg="암호화 문자열 입니다.";

/* 데이터 암호화 두번째 인수값으로 키값을 줄 수도 있다. */
$en_msg=$this->encrypt->encode($msg);

/* 데이터 복호화 (암호화 함수의 인수값으로 키값을 전달했다면, 
반드시 두번째 인수값으로 동일한 키값을 지정해주어야한다 */
$de_msg=$this->encrypt->decode($msg);

/* 암호화된 데이터 출력 */
echo $en_msg;

/* 복호화 : 데이터 원문 출력 */
echo $de_msg;
?>

 

 암호화 클래스 간단한 사용예제2 (CI 3.0)


<?php
/* 암호화 클래스 로드 */
$this->load->library('encryption');

/* 암호화할 데이터 */
$msg="암호화 문자열 입니다.";

/* PHP의 기본함수 bin2hex 함수와 
CI 암호화 클래스 함수를 사용하여 랜덤한 key 값을 생성 */
$key = bin2hex($this->encryption->create_key(16));

/* 암호화 클래스의 설정값중 새로 생성된 키값을 초기화 */
$this->encryption->initialize(array('key'=>$key));

/* 데이터 암호화 */
$en_msg=$this->encryption->encrypt($msg);

/*데이터 복호화 */
$de_msg=$this->encryption->decrypt($en_msg);

/* 암호화된 데이터 출력 */
echo $en_msg;

/* 복호화 : 데이터 원문 출력 */
echo $de_msg;
?>


 마지막으로 아래는 CI 에서 사용되는 암호화 클래스에대한 메뉴얼 링크이다. 자신이 사용하는 CI 버전을 잘 확인하여, 참고하면 도움이 될것이다. 


 CI 암호화 클래스 메뉴얼 싸이트


 CI 2.1.0 한글 메뉴얼 싸이트

 CI 3.0 메뉴얼 싸이트


LIST