지난 며칠 동안 PHP aes 암호화를 수행한 다음 .net에서 암호를 해독했습니다. pkcs7의 보완 작업을 수행했는데 암호 텍스트가 .net으로 전송된 후에도 여전히 암호 해독에 실패했습니다. 패딩이 유효하지 않아 제거할 수 없습니다. 검사 프로그램을 통해 암호화 벡터가 잘못 작성된 것으로 확인되었습니다. .net의 암호화된 벡터 형식은 배열이며, PHP에서는 슬래시가 포함된 문자열로 변환되어야 합니다. 변환 중에 추가로 0을 삭제했습니다. 아래 프로그램을 살펴보겠습니다. 이 프로그램은 자신만의 키와 IV를 설정한 후 사용할 수 있습니다.
class AESMcrypt{ /** * 设置默认的加密key 32位 * @var str * 为了保密省略后半部分 */ private static $defaultKey = "1A426B316FB648..........."; /** * 设置默认加密向量 * @var str * 为了保密省略后半部分 */ //在.net中的格式为 //$iv='{ 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF............}'; private $iv = "\x12\x34\x56\x78\x90\xAB\xCD\xEF\..........."; /** * 设置加密算法 * @var str */ private $cipher; /** * 设置加密模式 * @var str */ private $mode; public function __construct($cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC){ $this->cipher = $cipher; $this->mode = $mode; } /** * 对内容加密,注意此加密方法中先对内容使用padding pkcs7,然后再加密。 * @param str $content 需要加密的内容 * @return str 加密后的密文 */ public function encrypt($content){ if(empty($content)){ return null; } $srcdata = $this->addPkcs7Padding($content); return mcrypt_encrypt($this->cipher, $this->getSecretKey(), $srcdata, $this->mode, $this->iv); } /** * pkcs7补码 * * @param string $string 明文 * * @return String */ function addPkcs7Padding($string) { $blocksize = mcrypt_get_block_size($this->cipher, $this->mode); $len = strlen($string); //取得字符串长度 $pad = $blocksize - ($len % $blocksize); //取得补码的长度 $string .= str_repeat(chr($pad), $pad); //用ASCII码为补码长度的字符, 补足最后一段 return $string; } /** * 对内容解密,注意此加密方法中先对内容解密。再对解密的内容使用padding pkcs7去除特殊字符。 * @param String $content 需要解密的内容 * @return String 解密后的内容 */ public function decrypt($content){ if(empty($content)){ return null; } $content = mcrypt_decrypt($this->cipher, $this->getSecretKey(), $content, $this->mode, $this->iv); //$block = mcrypt_get_block_size($this->cipher, $this->mode); $pad = ord($content[($len = strlen($content)) - 1]); return substr($content, 0, strlen($content) - $pad); } public function getSecretKey() { return self::$defaultKey; } }
위의 내용을 포함하여 net과 호환되는 PHP AES 암호화에 대해 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.