php aes padding,php-使用AES / CBC / PKCS7Padding进行加密/解密
时间: 2023-07-19 11:36:19 浏览: 138
php AES加密解密
好的,我理解了你的问题。关于 PHP 中如何使用 AES/CBC/PKCS7Padding 进行加密/解密,可以使用 PHP OpenSSL 库来实现。以下是一个简单的示例代码:
```php
<?php
/**
* AES加密
* @param string $data 要加密的数据
* @param string $key 密钥
* @param string $iv 初始化向量
* @return string
*/
function aes_encrypt($data, $key, $iv) {
// PKCS7Padding 填充方式
$block_size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$padding = $block_size - (strlen($data) % $block_size);
$data .= str_repeat(chr($padding), $padding);
// 加密
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, $iv);
$encrypted = mcrypt_generic($cipher, $data);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
return base64_encode($encrypted);
}
/**
* AES解密
* @param string $data 要解密的数据
* @param string $key 密钥
* @param string $iv 初始化向量
* @return string
*/
function aes_decrypt($data, $key, $iv) {
// 解密
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher, base64_decode($data));
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
// 去掉 PKCS7Padding 填充
$padding = ord($decrypted[strlen($decrypted)-1]);
return substr($decrypted, 0, -$padding);
}
// 测试
$key = '1234567890123456'; // 密钥必须为16、24或32个字符
$iv = '1234567890123456'; // 初始化向量必须为16个字符
$data = 'Hello, world!';
$cipher_text = aes_encrypt($data, $key, $iv);
$plain_text = aes_decrypt($cipher_text, $key, $iv);
echo '明文: ' . $data . "\n";
echo '密文: ' . $cipher_text . "\n";
echo '解密后: ' . $plain_text . "\n";
```
需要注意几点:
1. 密钥必须为 16、24 或 32 个字符,初始化向量必须为 16 个字符,可以根据需要修改。
2. 在加密时需要进行 PKCS7Padding 填充,解密后需要去除填充。
3. 需要安装 PHP OpenSSL 扩展库,才能使用 mcrypt 函数。
阅读全文