首頁 > 後端開發 > php教程 > 如何安全地加密和解密 PHP 中的字串?

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

Patricia Arquette
發布: 2024-12-26 20:33:16
原創
447 人瀏覽過

How Can I Encrypt and Decrypt Strings in PHP Securely?

如何加密解密 PHP 字串?

加密 PHP 字串涉及使用金鑰將原始字串轉換為加密格式或鹽。解密字串需要相同的金鑰或鹽來檢索原始字串。

加密過程

  1. 加密:加密原始字串在CTR(計數器模式)或GCM(伽羅瓦/計數器)中使用安全演算法,如AES-256模式)。
  2. 驗證:使用 HMAC-SHA-256 計算加密字串的 MAC(訊息驗證碼)。將加密字串與MAC結合,產生最終的加密結果。

解密過程

  1. 驗證:重新計算加密結果的 MAC 並與包含的 MAC 進行比較。如果不同則中止。
  2. 解密: 使用正確的金鑰解密加密字串。

關鍵注意事項

  • 使用經過驗證的加密演算法(例如AES-GCM、 ChaCha20-Poly1305) 用於加密和身份驗證。
  • 利用 libsodium 或 defuse/php-encryption 等安全函式庫來實現強大的加密和解密功能。
  • 由於潛在的安全風險,請避免使用自己的加密技術.
  • 使用CSPRNG(加密安全)產生IV(初始化向量)偽隨機數產生器)如random_bytes 或odium_randombytes 。
  • 謹慎保護加密金鑰。考慮使用密鑰加密密鑰或安全密鑰管理系統。

使用 Libsodium 的範例:

<?php
use Sodium\Crypto;

function encrypt(string $message, string $key): string
{
    $nonce = random_bytes(Crypto::SECRETBOX_NONCEBYTES);
    $encrypted = Crypto::secretbox($message, $nonce, $key);
    return base64_encode($nonce . $encrypted);
}

function decrypt(string $encrypted, string $key): string
{
    $decoded = base64_decode($encrypted);
    $nonce = substr($decoded, 0, Crypto::SECRETBOX_NONCEBYTES);
    $ciphertext = substr($decoded, Crypto::SECRETBOX_NONCEBYTES);
    $decrypted = Crypto::secretbox_open($ciphertext, $nonce, $key);
    
    return $decrypted;
}

$message = 'Hello, world!';
$key = random_bytes(Crypto::SECRETBOX_KEYBYTES);
$encrypted = encrypt($message, $key);
$decrypted = decrypt($encrypted, $key);

var_dump($encrypted);
var_dump($decrypted);
登入後複製

以上是如何安全地加密和解密 PHP 中的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板