php aes padding,php-使用AES / CBC / PKCS7Padding进行加密/解密
时间: 2023-07-19 08:42:00 浏览: 207
PHP中可以使用openssl扩展来进行AES/CBC/PKCS7Padding加密/解密。下面是一个简单的示例代码:
```php
function encrypt($data, $key, $iv) {
$data = pkcs7_pad($data);
return openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
}
function decrypt($data, $key, $iv) {
$data = openssl_decrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
return pkcs7_unpad($data);
}
function pkcs7_pad($data) {
$block_size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$padding_char = $block_size - (strlen($data) % $block_size);
$data .= str_repeat(chr($padding_char), $padding_char);
return $data;
}
function pkcs7_unpad($data) {
$padding_char = ord($data[strlen($data) - 1]);
return substr($data, 0, -$padding_char);
}
```
其中,`pkcs7_pad`和`pkcs7_unpad`函数实现了PKCS7Padding的加解密操作。`encrypt`和`decrypt`函数则是使用openssl扩展进行AES/CBC加密/解密的函数。
注意,在使用openssl进行加解密时,需要同时指定`OPENSSL_RAW_DATA`和`OPENSSL_ZERO_PADDING`选项。这是因为默认情况下openssl会使用PKCS5Padding进行填充,而不是PKCS7Padding。如果不指定`OPENSSL_ZERO_PADDING`选项,则会出现解密失败的情况。
另外,需要注意的是,使用openssl进行加解密时,需要确保PHP的openssl扩展已经正确安装和配置。
阅读全文