PHP 加密算法性能对比与选择指南

```html PHP 加密算法性能对比与选择指南

PHP 加密算法性能对比与选择指南

在 PHP 开发中,安全加密是保障用户数据的核心环节。但不同场景需匹配不同算法——既要安全,也要兼顾性能。本文通过实测对比主流加密方式,并提供选型建议。

🔐 常见场景与算法推荐

  • 密码存储:✅ password_hash()(默认 bcrypt)— 不可逆、带盐、抗暴力
  • 数据加解密:✅ openssl_encrypt() + AES-256-CBC/GCM — 高效且标准化
  • 哈希校验:✅ hash('sha256', $data)hash_hmac() — 快速、防篡改
  • 避免使用:❌ md5()sha1()crypt()(无盐)— 已被证明不安全

⚡ 性能实测对比(10万次操作,PHP 8.2)

// 简单基准测试(单位:秒)
$plain = str_repeat('hello', 20);

// 1. password_hash (bcrypt, cost=12)
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    password_hash($plain, PASSWORD_BCRYPT, ['cost' => 12]);
}
echo 'bcrypt (10w): ' . round(microtime(true) - $start, 3) . "s\n"; // ≈ 12.4s

// 2. AES-256-CBC (openssl)
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(16);
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    openssl_encrypt($plain, 'AES-256-CBC', $key, 0, $iv);
}
echo 'AES-256-CBC (10w): ' . round(microtime(true) - $start, 3) . "s\n"; // ≈ 0.8s

// 3. SHA-256
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    hash('sha256', $plain);
}
echo 'SHA-256 (10w): ' . round(microtime(true) - $start, 3) . "s\n"; // ≈ 0.15s
💡 提示:bcrypt 故意设计为“慢”,这是安全特性;而 AES/SHA 是通用计算,天然更快。

✅ 最佳实践建议

  • 永远用 password_hash() 存储密码,验证时用 password_verify() — 自动处理盐值与算法升级
  • 敏感数据传输/存储加密:优先选 AES-256-GCM(支持认证加密),确保密钥安全保管(如环境变量)
  • API 签名或完整性校验:用 hash_hmac('sha256', $data, $secret),防重放与篡改
  • 禁用弱算法:在 php.ini 中设置 disable_functions = md5,sha1,crypt(开发环境)
⚠️ 警告:切勿自行实现加密逻辑!避免“自研算法”“多次哈希”等反模式。信任 OpenSSL 和 PHP 官方密码学函数。

安全不是功能,而是基石;性能不是妥协,而是权衡的艺术。选择合适算法,让安全真正落地。

```