Java와 MySQL에 이어서.. PHP언어를 통해 AES 암호화를 진행해야하는 일이 있었습니다.
PHP언어의 양방향 암호화는 mcrypt_encrypt함수를 통해 진행할 수 있습니다.
그런데.. 이 함수를 사용하려면 php-mcrypt 모듈 확장을 설치해야합니다.
일반적으로.. yum을 통해 설치할 수 있는데요.
sudo yum list php-mcrypt 명령어 혹은 root 계정으로 수행합니다.
참고 : http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_php-mcrypt_%EC%84%A4%EC%B9%98
yum으로 설치하고 php -m 명령어로 조회해보니 모듈이 추가되지 않았습니다.
이상하다? php 설정을 해야하나? 싶어 php.ini을 수정했습니다.
설정 후 php -m을 해보니 경고가 뜹니다.
- PHP 버전이 낮아 확장 모듈을 초기화할 수 없다는 뜻입니다.
그렇다면.. PHP를 재설치해야되나? 재컴파일해야되나?
- 아쉽게도 구축된 PHP의 원본 소스(.configure)가 없고 컴파일된 php만 존재해서 재컴파일은 불가능했습니다.
다른 방법이 있지 않을까? 싶어 php-mcrypt의 확장 버전을 기존 php와 동일하게 세팅하면 해결될 것 같았습니다.
php-mcrypt 저장소 - ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64/os/Packages/
- ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64.newkey/os/Packages/
를 통해 php-mcrypt-5.2.5-7.fc9.x86_64.rpm을 다운로드합니다.
5.2.5를 받는 이유는 php 버전이 5.2.5이기 때문입니다. php-mcrypt-5.1.x를 받으면 이번에는 설치를 할 수 없습니다.
yum이 아닌 rpm으로 직접 설치하는 것이기 때문에 디펜던시로 걸려있는 php-common-5.2.5-7.fc9.x86_64.rpm도 함께 받습니다.
이미 yum으로 php-mcrypt를 설치했고 디펜던시로 함께 설치된 php-common을 제거합니다. (둘다 버전이 5.3.3일거에요..)
자.. 이제 다시 php -m을 해봅니다.
mcrypt에 포함된 특정 함수를 수행하여 undefine 에러가 아닌 warnning이 뜨는지 미리 확인해봅니다.
드디어.. 알맞은 php 버전에 맞는 확장 모듈을 설치했습니다!
참고
- yum과 rpm명령 : http://ann-moon.tistory.com/85
- http://xens.tistory.com/entry/%ED%8C%81-PHP%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%ED%9B%84-Nmail-%EC%82%AC%EC%9A%A9%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95
- http://zetawiki.com/wiki/CentOS_yum_%ED%8C%A8%ED%82%A4%EC%A7%80_%EC%82%AD%EC%A0%9C
PHP언어의 양방향 암호화는 mcrypt_encrypt함수를 통해 진행할 수 있습니다.
그런데.. 이 함수를 사용하려면 php-mcrypt 모듈 확장을 설치해야합니다.
일반적으로.. yum을 통해 설치할 수 있는데요.
yum list php-mcrypt yum install php-mcrypt- You need to be root to perform this command. 라는 메세지가 뜨면
sudo yum list php-mcrypt 명령어 혹은 root 계정으로 수행합니다.
참고 : http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_php-mcrypt_%EC%84%A4%EC%B9%98
yum으로 설치하고 php -m 명령어로 조회해보니 모듈이 추가되지 않았습니다.
이상하다? php 설정을 해야하나? 싶어 php.ini을 수정했습니다.
php.ini
extension_dir = "/모듈들이 모여있을 공통 경로" ; 암호화 모듈 설정(리눅스용) extension=mcrypt.so
설치한 php-mcrypt 버전
명령어 : rpm -qa | grep mcrypt php-mcrypt-5.3.3-4.el6.x86_64 libmcrypt-2.5.8-9.el6.x86_64
설치한 php-mcrypt 의 경로
명령어 : rpm -ql php-mcrypt
설정 후 php -m을 해보니 경고가 뜹니다.
PHP Warning: PHP Startup: mcrypt: Unable to initialize module Module compiled with module API=20090626, debug=0, thread-safety=0 PHP compiled with module API=20060613, debug=0, thread-safety=0 These options need to match- 구글링해보니.. PHP 컴파일 버전은 20060613인데, 확장 모듈은 20090628입니다.
- PHP 버전이 낮아 확장 모듈을 초기화할 수 없다는 뜻입니다.
그렇다면.. PHP를 재설치해야되나? 재컴파일해야되나?
- 아쉽게도 구축된 PHP의 원본 소스(.configure)가 없고 컴파일된 php만 존재해서 재컴파일은 불가능했습니다.
다른 방법이 있지 않을까? 싶어 php-mcrypt의 확장 버전을 기존 php와 동일하게 세팅하면 해결될 것 같았습니다.
php-mcrypt 저장소 - ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64/os/Packages/
- ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64.newkey/os/Packages/
를 통해 php-mcrypt-5.2.5-7.fc9.x86_64.rpm을 다운로드합니다.
5.2.5를 받는 이유는 php 버전이 5.2.5이기 때문입니다. php-mcrypt-5.1.x를 받으면 이번에는 설치를 할 수 없습니다.
yum이 아닌 rpm으로 직접 설치하는 것이기 때문에 디펜던시로 걸려있는 php-common-5.2.5-7.fc9.x86_64.rpm도 함께 받습니다.
이미 설치된 5.3.3 모듈 제거하기
이미 yum으로 php-mcrypt를 설치했고 디펜던시로 함께 설치된 php-common을 제거합니다. (둘다 버전이 5.3.3일거에요..)
// 설치된 모듈 찾아보기
rpm -qa | grep mcrypt
rpm -qa | grep php-common
// 모듈 제거하기 (알맞은 파일명으로 제거)
sudo yum remove php-mcrypt.x86_64
sudo yum remove php-common
RPM 파일 설치
// php-common 부터 설치 // wget으로 다운로드합니다. wget 'ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64/os/Packages/php-common-5.2.5-7.fc9.x86_64.rpm' wget 'ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64.newkey/os/Packages/php-mcrypt-5.2.5-7.fc9.x86_64.rpm' // 설치합니다. -i 옵션은 install의 의미, -u를 하면 없으면 설치, 있으면 버전업그레이드입니다. sudo rpm -ivh php-common-5.2.5-7.fc9.x86_64.rpm sudo rpm -ivh php-mcrypt-5.2.5-7.fc9.x86_64.rpm- 참고 : libmcrypt-2.5.8-9.el6.x86_64 이 설치되지 않은 경우 이 모듈도 설치를 해야합니다.(yum으로 버전을 체크한 후 2.5.8-9.el6 버전을 받았습니다)
자.. 이제 다시 php -m을 해봅니다.
mbstring mcrypt mysql- mcrypt가 드디어 설치되었습니다.
mcrypt에 포함된 특정 함수를 수행하여 undefine 에러가 아닌 warnning이 뜨는지 미리 확인해봅니다.
php -r "mcrypt_create_iv();"- Warning: mcrypt_create_iv() expects at least 1 parameter, 0 given in Command line code on line 1
드디어.. 알맞은 php 버전에 맞는 확장 모듈을 설치했습니다!
참고
- yum과 rpm명령 : http://ann-moon.tistory.com/85
- http://xens.tistory.com/entry/%ED%8C%81-PHP%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%ED%9B%84-Nmail-%EC%82%AC%EC%9A%A9%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95
- http://zetawiki.com/wiki/CentOS_yum_%ED%8C%A8%ED%82%A4%EC%A7%80_%EC%82%AD%EC%A0%9C
'PHP' 카테고리의 다른 글
[PHP] 메모리 사용량을 통해 memory leak 찾기 (0) | 2016.12.20 |
---|---|
[PHP] strrpos 함수의 offset 인자 (0) | 2016.09.08 |
[PHP] 문자를 hex로 바꾸고 다시 복구하기 (0) | 2016.08.29 |
[PHP] AES128/ECB 복호화 하기 (0) | 2016.08.29 |