首页 > 后端开发 > php教程 > 如何使用已建立的库安全地加密和解密 PHP 中的字符串?

如何使用已建立的库安全地加密和解密 PHP 中的字符串?

Barbara Streisand
发布: 2024-12-17 10:06:24
原创
976 人浏览过

How Can I Securely Encrypt and Decrypt Strings in PHP Using Established Libraries?

在 PHP 中加密和解密字符串

避免常见陷阱

在深入研究实现之前了解加密和解密之后,了解加密和身份验证之间的区别至关重要。为了安全的数据保护,建议使用经过身份验证的加密而不是简单的加密。此外,建议避免创建自定义加密实现,而是依赖安全且完善的库,例如 libsodium 或 defuse/php-encryption。

加密和解密

加密:

  1. 使用 AES-CTR 或 GCM 加密数据(推荐)。
  2. 使用以下方式验证密文HMAC-SHA-256(或用于流的 Poly1305密码)。

解密:

  1. 验证密文的 MAC(如果不使用 Poly1305 或 GCM)。
  2. 解密

使用 Libsodium 实现

use Sodium\Crypto\SecretBox;

$key = random_bytes(SecretBox::KEYBYTES);
$nonce = random_bytes(SecretBox::NONCEBYTES);

$ciphertext = SecretBox::encrypt($message, $nonce, $key);
$plaintext = SecretBox::decrypt($ciphertext, $nonce, $key);
登录后复制

使用 defuse/php-encryption 实现

use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;

$key = Key::createNewRandomKey();

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

额外注意事项

  • 避免在加密之前压缩数据。
  • 使用 mb_strlen() 和 mb_substr() 等安全函数进行字符串操作。
  • 使用CSPRNG(例如, random_bytes())。
  • 避免使用 bin2hex() 或 base64_encode() 等函数来避免潜在的信息泄露。
  • 始终在之后验证密文 (MAC)

注意事项

  • 不要加密密码;请改用密码哈希算法。
  • 不要加密 URL 参数;这不是合适的解决方案。

Libsodium 示例

use Sodium\Crypto\SecretBox;

$key = random_bytes(SecretBox::KEYBYTES);
$nonce = random_bytes(SecretBox::NONCEBYTES);

$ciphertext = SecretBox::encrypt($message, $nonce, $key);
$plaintext = SecretBox::decrypt($ciphertext, $nonce, $key);

echo "Ciphertext: " . $ciphertext . PHP_EOL;
echo "Plaintext: " . $plaintext . PHP_EOL;
登录后复制

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

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