AES(Advanced Encryption Standard)是一种对称加密算法,使用相同的密钥对数据进行加密和解密,其中128代表加密块大小为128位。在PHP中,可以使用OpenSSL函数库提供的AES加密和解密操作,下面将介绍如何使用AES 128模式进行加密和解密。
在进行AES加密和解密操作前,需要先安装并启用OpenSSL扩展。可以通过以下代码检查OpenSSL扩展是否已启用:
<?php
if (extension_loaded('openssl')) {
echo "OpenSSL is enabled";
} else {
echo "OpenSSL is not enabled";
}
?>
如果输出结果为“OpenSSL is enabled”,则证明已经安装并启用了OpenSSL扩展。
接下来,我们可以使用OpenSSL函数库提供的openssl_encrypt()和openssl_decrypt()函数进行AES加密和解密操作。例如,以下代码演示了如何使用AES 128 CBC模式进行加密和解密:
<?php
$plaintext = 'This is a secret message.';
$key = 'mysecretkey12345';
$iv = random_bytes(16); // 生成随机的初始向量
// 使用AES 128 CBC模式进行加密
$ciphertext = openssl_encrypt($plaintext, 'AES-128-CBC', $key, OPENSSL_ZERO_PADDING, $iv);
// 使用AES 128 CBC模式进行解密
$decrypted = openssl_decrypt($ciphertext, 'AES-128-CBC', $key, OPENSSL_ZERO_PADDING, $iv);
echo "Plaintext: " . $plaintext . "<br>";
echo "Cipher text: " . $ciphertext . "<br>";
echo "Decrypted text: " . $decrypted;
?>
在上面的示例中,$plaintext是要加密的明文,$key是用来加密和解密的密钥,$iv是初始向量。使用random_bytes()函数可以生成随机的初始向量。
使用openssl_encrypt()函数进行加密时,第一个参数是要加密的明文,第二个参数是加密算法和模式,第三个参数是密钥,第四个参数是填充模式,第五个参数是初始向量。在AES 128 CBC模式中,填充模式应该为OPENSSL_ZERO_PADDING。
使用openssl_decrypt()函数进行解密时,第一个参数是要解密的密文,其它参数与加密操作相同。解密后得到的$decrypted应该与$plaintext相同。
AES加密和解密操作可以用于保护敏感信息,例如密码、银行账号等。在实际应用中,需要注意密钥的安全性和保密性,以及初始向量的随机性。