2013. 8. 6. 10:09
mcrypt pkcs5 패딩 적용 라이브러리
2013. 8. 6. 10:09 in 자작소스/PHP
일반적으로 C, C++, .net등에서는 PKCS5패딩을 기본으로 사용하지만 PHP는 Zeros패딩만 사용하기때문에
암/복호화가 안된다. PHP쪽에서 PKCS5패딩을 사용하도록 적용한 라이브러리
/**
* mcrypt 관련 함수 */ define('ENC_KEY', hex2bin(md5('키값'))); define('ENC_IV', hex2bin(md5('IV값'))); /** * PKCS5 패딩추가 * @param string $text * @param int $blocksize * @return string */ function pkcs5_pad ($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } /** * PKCS5 패딩제거 * @param string $text * @return boolean|string */ function pkcs5_unpad($text) { $pad = ord($text{strlen($text)-1}); if ($pad > strlen($text)) return false; if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, -1 * $pad); } /** * hex2bin * @param string $hexdata */ function hex2bin($hexdata) { $bindata=""; for ($i=0,$cnt=strlen($hexdata);$i<$cnt;$i+=2) { $bindata .= chr(hexdec(substr($hexdata,$i,2))); } return $bindata; } /** * 키를 통해 암호화 * @param string $str */ function m_encrypt($str) { $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, 'cbc'); $input = pkcs5_pad($str, $size); return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, ENC_KEY, $input, MCRYPT_MODE_CBC, ENC_IV)); } /** * 키를 통해 복호화 * @param string $str */ function m_decrypt($str) { return pkcs5_unpad(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, ENC_KEY, base64_decode($str), MCRYPT_MODE_CBC, ENC_IV)); }