首頁 >後端開發 >php教程 >如何使用已建立的程式庫安全地加密和解密 PHP 中的字串?

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

Barbara Streisand
Barbara Streisand原創
2024-12-17 10:06:24978瀏覽

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

在PHP 中加密和解密字串

避免常見陷阱

避免常見陷阱

在深入研究在實作之前了解加密和解密之後,了解加密和身分驗證之間的差異至關重要。為了安全的資料保護,建議使用經過身份驗證的加密而不是簡單的加密。此外,建議避免建立自訂加密實現,而是依賴安全且完善的程式庫,例如 libsodium 或 defuse/php-encryption。

加密解密

  1. 加密:
使用 AES-CTR 或 GCM 加密資料(建議)。

使用以下方式驗證密文HMAC-SHA-256(或用於流的 Poly1305密碼)。

  1. 解密:
驗證密文的 MAC(如果不使用 Poly1305 或 GCM)。

解密

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);

使用Libsodium 實作

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

$key = Key::createNewRandomKey();

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

使用defuse/php-encryption 實作

額外注意事項
  • 避免在加密之前壓縮資料。
  • 使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn