php实现aes
PHP实现AES加密解密
AES(高级加密标准)是一种对称加密算法,常用于数据加密。PHP通过openssl扩展提供了AES加密支持。
AES加密示例代码
function encryptAES($data, $key, $iv) {
$cipher = "aes-256-cbc";
$options = OPENSSL_RAW_DATA;
$encrypted = openssl_encrypt($data, $cipher, $key, $options, $iv);
return base64_encode($encrypted);
}
AES解密示例代码
function decryptAES($encryptedData, $key, $iv) {
$cipher = "aes-256-cbc";
$options = OPENSSL_RAW_DATA;
$decrypted = openssl_decrypt(base64_decode($encryptedData), $cipher, $key, $options, $iv);
return $decrypted;
}
使用方法
$key = "0123456789abcdef0123456789abcdef"; // 32字节密钥
$iv = "1234567890abcdef"; // 16字节初始化向量
$data = "需要加密的数据";
$encrypted = encryptAES($data, $key, $iv);
$decrypted = decryptAES($encrypted, $key, $iv);
注意事项
密钥长度必须与选择的算法匹配:
- AES-128需要16字节密钥
- AES-192需要24字节密钥
- AES-256需要32字节密钥
初始化向量(IV)必须是16字节长。可以使用openssl_random_pseudo_bytes(16)生成随机IV。
安全建议
使用强随机密钥和IV,每次加密使用不同的IV。考虑使用PBKDF2或类似算法从密码派生密钥。
其他加密模式
除了CBC模式,还可以选择其他模式如GCM(提供认证加密):
function encryptAESGCM($data, $key) {
$cipher = "aes-256-gcm";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));
$tag = "";
$encrypted = openssl_encrypt($data, $cipher, $key, OPENSSL_RAW_DATA, $iv, $tag);
return base64_encode($iv.$tag.$encrypted);
}






