php 实现aes
AES 加密实现
在 PHP 中实现 AES 加密可以使用 openssl_encrypt 和 openssl_decrypt 函数。以下是 AES-256-CBC 模式的示例代码:
$plaintext = "This is a secret message";
$key = openssl_random_pseudo_bytes(32); // 256-bit key
$iv = openssl_random_pseudo_bytes(16); // 128-bit IV
// 加密
$ciphertext = openssl_encrypt(
$plaintext,
'aes-256-cbc',
$key,
OPENSSL_RAW_DATA,
$iv
);
// 解密
$decrypted = openssl_decrypt(
$ciphertext,
'aes-256-cbc',
$key,
OPENSSL_RAW_DATA,
$iv
);
echo "Original: $plaintext\n";
echo "Decrypted: $decrypted\n";
密钥和 IV 生成
安全地生成密钥和初始化向量 (IV) 是 AES 加密的关键:
// 生成 256 位 (32 字节) 随机密钥
$key = bin2hex(openssl_random_pseudo_bytes(32));
// 生成 128 位 (16 字节) 随机 IV
$iv = bin2hex(openssl_random_pseudo_bytes(16));
存储加密数据
加密后的数据通常以 Base64 编码存储:
$encrypted = openssl_encrypt(
$data,
'aes-256-cbc',
$key,
OPENSSL_RAW_DATA,
$iv
);
$storable = base64_encode($encrypted);
解密存储的数据
从存储格式解密数据:
$encrypted = base64_decode($storable);
$decrypted = openssl_decrypt(
$encrypted,
'aes-256-cbc',
$key,
OPENSSL_RAW_DATA,
$iv
);
其他 AES 模式
PHP 支持多种 AES 加密模式:
// AES-128-CBC
openssl_encrypt($data, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
// AES-256-GCM (需要 PHP 7.1+)
openssl_encrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
安全注意事项
确保密钥和 IV 的安全存储,每次加密使用不同的 IV。对于密码加密,考虑使用专门的密码哈希函数如 password_hash 而非 AES。

以上代码提供了 PHP 中实现 AES 加密的基本方法,可根据具体需求调整加密模式和参数。






