aes php实现
PHP 实现 AES 加密/解密
PHP 内置的 openssl 扩展提供了 AES 加密功能,支持多种模式(如 CBC、ECB 等)和填充方式。以下是完整的实现示例:
AES 加密
function aesEncrypt($data, $key, $iv) {
$cipher = "aes-256-cbc"; // 使用 AES-256-CBC 模式
$options = OPENSSL_RAW_DATA;
$encrypted = openssl_encrypt($data, $cipher, $key, $options, $iv);
return base64_encode($encrypted); // 返回 Base64 编码结果
}
AES 解密
function aesDecrypt($encryptedData, $key, $iv) {
$cipher = "aes-256-cbc";
$options = OPENSSL_RAW_DATA;
$decrypted = openssl_decrypt(
base64_decode($encryptedData),
$cipher,
$key,
$options,
$iv
);
return $decrypted;
}
使用示例
$key = "your_secret_key_32_bytes_long"; // 必须为 32 字节(256 位)
$iv = "initialization_vec"; // 必须为 16 字节(128 位)
$data = "Sensitive data to encrypt";
// 加密
$encrypted = aesEncrypt($data, $key, $iv);
echo "Encrypted: " . $encrypted . "\n";
// 解密
$decrypted = aesDecrypt($encrypted, $key, $iv);
echo "Decrypted: " . $decrypted . "\n";
关键参数说明
- $key:密钥长度需与算法匹配(如 AES-256 需 32 字节密钥)
- $iv:初始化向量(IV)必须唯一且随机,CBC 模式要求 16 字节
- $cipher:支持的算法列表可通过
openssl_get_cipher_methods()获取
安全建议
- 使用强随机密钥和 IV(可通过
random_bytes(32)生成) - 避免硬编码密钥,建议从环境变量读取
- 对加密结果进行 HMAC 验证以确保完整性
其他模式示例
如需使用 ECB 模式(不推荐,仅演示):

$cipher = "aes-256-ecb"; // ECB 模式无需 IV
$encrypted = openssl_encrypt($data, $cipher, $key, OPENSSL_RAW_DATA);
注:ECB 模式安全性较低,推荐优先使用 CBC 或 GCM 模式。






