PHP 加密算法性能对比与选择指南
在 PHP 开发中,安全加密是保障用户数据的核心环节。但不同场景需匹配不同算法——既要安全,也要兼顾性能。本文通过实测对比主流加密方式,并提供选型建议。
🔐 常见场景与算法推荐
- 密码存储:✅
password_hash()(默认ARGON2ID或BCRYPT) - 敏感数据加解密:✅
openssl_encrypt()/decrypt()(AES-256-GCM) - 签名/校验:✅
hash_hmac('sha256', $data, $key) - 避免使用:❌
md5()、sha1()、mcrypt_*(已废弃)
⚡ 性能实测对比(10万次操作,PHP 8.2)
// 简单基准测试(单位:秒)
// password_hash('test', PASSWORD_ARGON2ID) → ~0.28s (强安全,慢)
// password_hash('test', PASSWORD_BCRYPT) → ~0.08s (平衡之选)
// openssl_encrypt($data, 'aes-256-gcm', $key) → ~0.012s (高速对称加密)
// hash_hmac('sha256', $data, $key) → ~0.003s (极快,仅校验)
💡 实用代码示例
✅ 推荐:密码哈希(自动适配最佳算法)
<?php
$password = "user_secret_123";
$hash = password_hash($password, PASSWORD_ARGON2ID, [
'memory_cost' => 65536, // 64MB
'time_cost' => 4,
'threads' => 3
]);
if (password_verify($password, $hash)) {
echo "验证成功!";
}
?>
✅ 推荐:AES-256-GCM 加密(带认证)
<?php
$key = random_bytes(32); // 256-bit key
$iv = random_bytes(12); // GCM recommended IV length
$data = "敏感订单信息:¥999.00";
$ciphertext = openssl_encrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
// 解密时必须传入 $tag 和 $iv
$decrypted = openssl_decrypt($ciphertext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
echo $decrypted; // 输出原文
?>
📌 小贴士:永远使用
random_bytes() 生成密钥/IV;切勿硬编码或使用 time()、rand()。
⚠️ 警告:不要自行实现加密逻辑!优先使用 PHP 内置函数(如
password_hash、openssl_*),它们经过严格审计且持续更新。
🎯 一句话选型口诀
“存密码用 password_hash,传数据用 AES-GCM,做签名用 HMAC-SHA256,求快别碰 md5。”
安全不是功能,而是习惯。选择合适算法只是第一步——定期升级 PHP 版本、管理密钥生命周期、启用 HTTPS,才能构建真正可信的防线。
```