首页 > 后端开发 > php教程 > 如何在 PHP 中安全地加密和解密字符串?

如何在 PHP 中安全地加密和解密字符串?

Mary-Kate Olsen
发布: 2024-12-24 07:29:32
原创
871 人浏览过

How Can I Encrypt and Decrypt Strings Securely in PHP?

如何使用密钥加密和解密 PHP 字符串

加密和解密 PHP 中的字符串涉及利用加密技术来保护敏感信息

加密

使用密钥加密字符串:

  1. 在 CTR 模式下使用 AES: 使用计数器 (CTR) 中的高级加密标准 (AES) 加密字符串
  2. 验证密文:使用 HMAC-SHA-256 或 Poly1305(对于流)计算 IV 和密文上基于哈希的消息验证代码 (HMAC)密码)。

解密

要使用相同的密钥解密加密字符串:

  1. 检查 MAC :重新计算MAC并与保存的进行比较一。
  2. 解密消息:在 CTR 模式下使用 AES 解密密文。

其他注意事项

  • 避免之前压缩数据加密。
  • 使用 mb_strlen() 和 mb_substr() 以及“8 位”字符集来防止出现问题。
  • 使用 CSPRNG 生成 IV 并避免 MCRYPT_RAND。
  • 始终加密然后是 MAC 以确保机密性和

Libsodium for PHP

如果使用 PHP 7.2 或更高版本,请考虑使用 libsodium 库:

use ParagonIE\Halite\Symmetric\Crypto as SymmetricCrypto;

$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
$ciphertext = SymmetricCrypto::encrypt($message, $key);
$plaintext = SymmetricCrypto::decrypt($ciphertext, $key);
登录后复制

defuse/php-加密

作为libsodium 的替代方案:

use Defuse\Crypto\Crypto;

$key = Key::createNewRandomKey();
$ciphertext = Crypto::encrypt($message, $key);
$plaintext = Crypto::decrypt($ciphertext, $key);
登录后复制

密码注意事项

  • 对于密码: 使用 Argon2、scrypt、bcrypt 或PBKDF2-SHA256 具有高
  • 对于身份验证:使用基于 HMAC 的算法,如 HKDF2 或 hash_hmac() 而不是加密。
  • 对于 URL 参数:使用为 URL 参数验证和篡改保护而设计的适当框架或库。

以上是如何在 PHP 中安全地加密和解密字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板