보통, 인터넷에서 회원가입할 때는 그 암호를 다시 암호화 해야 한다. 그때 보통 mysql 에서 제공하는 passwd 를 사용한다. 그리고 php 에서는 md5 를 이용한다. 이 암호화 모두 한 방향으로 만 작동한다. 한쪽으로만 작동한다는 말은 풀수 있는 방법이 없는 암호라는 말이다. 그래서 암호를 검사할 때도 같은 방법으로 암호화 하여 두 사이가 같은 검사하는 방법을 이용한다.

이런 거 말고 역으로도 암호화가 가능한 기능이 필요할 때가 있다. 사용자에게 일기를 쓸 수 있게 한다든지등등 기타 다시 그 내용을 알 필요가 있을 때는 다시 복호화가 가능해야 한다. 이 중하나가 mcrypt 계열 함수 이다.



이 함수가 가능하기 위해서는 우선, 또 다른 것을 설치해야 한다. (이런 거 설치 안하고 할 수 있는 암호를 찾아 보았으나 그런거 없었다.. )



http://man.phpschool.com/manual/kr/index.php 이 쪽에서 메뉴얼( 메뉴얼 자체는 한글이지만 아직 번역안 된 곳이 중간중간 보인다. 이번에 할려는 암호화 쪽도 아직 번역이 안되어 있다. )

mcrypt 쪽은 http://man.phpschool.com/manual/kr/ref.mcrypt.php 여기 잘 설명되어 있다. 리눅스 쪽은 http://mcrypt.sourceforge.net/ 여기서 다운 받고 윈도우 쪽은 http://ftp.emini.dk/pub/php/win32/mcrypt/

여기서 프로그램을 받아라고 잘 설명되어 있다. 그런데 윈도우 쪽은 하나의 파일이 빠져 있다. 그 밑에 사용자가 글 적는 란에 누군가가 윈도우 사용자는 http://ftp.proventum.net/pub/php/win32/misc/mcrypt/ 친절히 설명해 주었다.



각자 자신에 맞게 파일을 받아 설치한다. (리눅스 쪽은 알아서.. 사실 리눅스 씩이나 깔면 뭔가 삽질하는데 재주가 있다는 뜻이다. 미안하지만 난 리눅스 쪽은 아직안 해 봤다. 처음에도 말했다시피 결국 나도 리눅스에서 이 걸을 깔아야 한다. .. )



난, 아직은 윈도우 쪽이므로 윈도우에 대해서만 설명하겠다. 우선 받아서 압출을 푼다. 그 안에 중요한 파일은 두개의 dll 파일이다. libmcrypt.dll 과 php_mcrypt.dll 파일. 안에 README.txt 에 설명서가 있다. 잘 할 수 있으리라 믿는다. 그러나 잘 모르겠다는 사람(나중에 이 사람중에 내가 있을지 몰라서) 설명해 둔다.



libmcrypt.dll 파일을 window 폴더나 기타 path 가 걸린 폴더에 넣어둔다. 설명서에서는 c:winntsystem32 를 예로 들었다. (당연히 사람에 따라 폴더이름이 다른수 있다. 윈도우를 어떻게 설치했냐에 따라서..) (path 가 걸려 있다는 말은 환경변수에 path 라는 곳에 이름이 들어 있는 디렉토리를 만한다. )



그리고 php_mcrypt.dll 파일도 두고 싶은 곳에 둔다. 난 한곳에 모아 두는 것을 좋아하므로 C: oolsapmPHP 폴더(디렉토리) 밑에 extension 이라는 폴더를 만들었다. 그 안에 두었다. 그리고 마지막으로 php.ini 을 수정해야 한다. window 폴더에 있을것이다.

수정해야 할 것은 두가지 인다. 우선 extension_dir = "./" 를 찾아 수정한다. 방금 전 php_mcrypt.dll 를 넣어 두었던 폴더로 수정한다. 내 경우

extension_dir = "C:/tools/apm/PHP/extension/" 이다.



그리고 extension=php_mcrypt.dll 라는 곳을 찾아 앞에 설정된 주석을 빼준다. (; 세미콜론을 빼준다. )



설치는 끝났다.

http://man.phpschool.com/manual/kr/ref.mcrypt.php 에 보면 예제가 있다. 이 예제를 실행해 보자. 난 2번째 나온 예제를 선택했다.



?>?>?> $key = "this is a secret key";
$input = "Let us meet at 9 o'clock at the secret place.";

$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
?>


이 예제를 실행해 보자. mcrypt_generic_deinit($td); 가 뭔지 모를 경고를 낸다. 그냥, 주석처리 해도 문제 없어 보인다. 아무 것도 안 나오, 좀 밋밋하다. 나도 잘 모르는 상태이므로 공부하다가 계속 이어 나가야 될 것 같다.