php实现aes
PHP实现AES加密解密
AES(高级加密标准)是一种对称加密算法,常用于数据加密。PHP通过openssl扩展提供AES支持,以下是实现方法:

AES-256-CBC加密
function encryptAES($data, $key, $iv) {
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($encrypted);
}
AES-256-CBC解密
function decryptAES($encryptedData, $key, $iv) {
$decrypted = openssl_decrypt(base64_decode($encryptedData), 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
return $decrypted;
}
使用方法
$key = 'your-32-byte-encryption-key-here'; // 32字节密钥
$iv = openssl_random_pseudo_bytes(16); // 16字节初始化向量
$data = 'Sensitive information';
$encrypted = encryptAES($data, $key, $iv);
$decrypted = decryptAES($encrypted, $key, $iv);
注意事项
- 密钥长度必须与所选算法匹配:AES-128需要16字节,AES-192需要24字节,AES-256需要32字节
- IV(初始化向量)应该是随机生成的,且每次加密都应使用不同的IV
- 考虑使用
openssl_cipher_iv_length()获取特定算法的IV长度 - 对于密码学安全应用,建议使用专门的库如
libsodium(PHP 7.2+内置)
替代方案:使用libsodium(PHP 7.2+)
function sodiumEncrypt($message, $key) {
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
return base64_encode($nonce . $ciphertext);
}
function sodiumDecrypt($encrypted, $key) {
$decoded = base64_decode($encrypted);
$nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
$ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
return sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
}
安全建议
- 永远不要硬编码加密密钥
- 考虑使用密钥派生函数(如PBKDF2)从密码生成密钥
- 定期轮换加密密钥
- 结合使用消息认证码(MAC)确保数据完整性






