aes php实现
AES 加密在 PHP 中的实现
PHP 提供了内置函数支持 AES 加密,主要通过 openssl_encrypt 和 openssl_decrypt 实现。以下是 AES-256-CBC 模式的完整实现示例:
加密函数
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);
}
解密函数
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;
}
密钥和 IV 生成
AES-256 需要 32 字节密钥和 16 字节初始化向量(IV),可以使用以下方法生成:
$key = openssl_random_pseudo_bytes(32); // 256位密钥
$iv = openssl_random_pseudo_bytes(16); // 128位IV
使用示例
$plaintext = "Sensitive data";
$key = hex2bin("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
$iv = hex2bin("abcdef9876543210abcdef9876543210");
$encrypted = encryptAES($plaintext, $key, $iv);
$decrypted = decryptAES($encrypted, $key, $iv);
echo "Encrypted: " . $encrypted . "\n";
echo "Decrypted: " . $decrypted;
安全注意事项
密钥应当通过安全方式存储,避免硬编码在代码中。IV 应当每次加密都重新生成,不需要保密但需要与密文一起存储。
对于需要存储的加密数据,建议将 IV 和密文一起存储:
$encryptedData = base64_encode($iv) . ':' . $encrypted;
解密时分离 IV 和密文:
list($ivPart, $dataPart) = explode(':', $encryptedData, 2);
$iv = base64_decode($ivPart);
$decrypted = decryptAES($dataPart, $key, $iv);
其他 AES 模式
PHP 支持多种 AES 模式,可通过修改 $cipher 参数切换:
aes-128-cbc(128位密钥)aes-192-cbc(192位密钥)aes-256-gcm(GCM 认证加密模式)
GCM 模式需要额外处理认证标签:
function encryptGCM($data, $key, $iv, &$tag) {
return openssl_encrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
}
function decryptGCM($data, $key, $iv, $tag) {
return openssl_decrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
}






