下面是“PHP实现的AES双向加密解密功能示例【128位】”的完整攻略:
1. 如何实现AES加密解密功能?
要使用PHP实现AES加密解密功能,我们需要使用PHP的mcrypt扩展。具体步骤如下:
-
安装mcrypt扩展:在Linux环境下,可以使用以下命令行安装:
sudo apt-get install php5-mcrypt
;在Windows环境下,可以在php.ini文件中启用mcrypt扩展。 -
设定密钥和初始化向量:在代码中指定AES加密解密所需的密钥和初始化向量,其中密钥需要128位长度。
-
实现加密和解密功能:根据mcrypt扩展提供的API,实现AES加密解密功能。其中加密使用的函数为mcrypt_encrypt(),解密使用的函数为mcrypt_decrypt()。
具体实现代码如下:
// 密钥
$key = 'your_key_here';
// 初始化向量
$iv = mcrypt_create_iv(16, MCRYPT_RAND);
// 加密
function aes_encrypt($input, $key, $iv) {
$blocksize = 16;
$input = pkcs5_pad($input, $blocksize);
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, $iv);
$data = mcrypt_generic($cipher, $input);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
return base64_encode($data);
}
// 解密
function aes_decrypt($input, $key, $iv) {
$blocksize = 16;
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, $iv);
$data = mdecrypt_generic($cipher, base64_decode($input));
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
$data = pkcs5_unpad($data, $blocksize);
return $data;
}
function pkcs5_pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text, $blocksize) {
$pad = ord($text[strlen($text)-1]);
if ($pad > $blocksize) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
这里的加密模式使用CBC模式,填充模式使用PKCS#5。
2. 如何在PHP中使用AES加密解密?
使用上述代码中的aes_encrypt()
和aes_decrypt()
函数,我们可以在PHP中很方便地实现AES加密解密。以下是示例代码:
示例1:加密和解密字符串
$input = "Hello, World!"; // 待加密字符串
// 加密
$encrypted = aes_encrypt($input, $key, $iv);
echo "加密后:".$encrypted."\n";
// 解密
$decrypted = aes_decrypt($encrypted, $key, $iv);
echo "解密后:".$decrypted."\n";
示例2:加密和解密文件
$filename = "test.txt"; // 待加密文件名
// 加密
$input = file_get_contents($filename);
$encrypted = aes_encrypt($input, $key, $iv);
file_put_contents($filename.".enc", $encrypted);
// 解密
$encrypted = file_get_contents($filename.".enc");
$decrypted = aes_decrypt($encrypted, $key, $iv);
file_put_contents($filename.".dec", $decrypted);
在示例代码2中,我们将待加密的文件读入到字符串中后,再进行加密。加密后的内容会写入到同名的.enc文件中。解密时,我们读入.enc文件的内容,进行解密后再写入到同名的.dec文件中。
以上就是实现AES双向加密解密功能的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现的AES双向加密解密功能示例【128位】 - Python技术站