PHP 7.1에서 mcrypt 대체하기
· 약 3분
MCRYPT
- 암호화 함수인
mcrypt
가 PHP 7.1 버전부터 Deprecated 되었다. - 왜 사라졌는지는 링크에 자세하게 나와있다.
기존 소스
- PHP 구버전에서는
mcrypt
와MCRYPT_RIJNDAEL_128
알고리즘을 통해 AES128 이 구현되어 있을 것이다. - MCRYPT_RIJNDAEL_128은 AES 128과 동일하다.
- 타 언어와는 조금 다른데, 호환을 위해선 pkcs5 padding 으로 변경해주는 작업이 필요하다.
- php mcrypt function 의 기본 패딩은 zeros padding
<?php
// 이런 식이거나
$cipherText = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, pkcs5_pad($plainText), MCRYPT_MODE_CBC, $iv);
// 이런 식일 것
$td = mcrypt_module_open("rijndael-128", "", "cbc", "");
@mcrypt_generic_init($td, $key, $iv);
$cipherText = @mcrypt_generic($td, pkcs5_pad($plainText));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
function pkcs5_pad($text, $blockSize = 16) {
$pad = $blockSize - (strlen($text) % $blockSize);
return $text . str_repeat(chr($pad), $pad);
}
대안
- PHP 5.3 부터 사용 가능한 openssl_encrypt 함수를 쓰면 된다.
- openssl 확장 모듈이 설치되어야한다.