ホームページ > バックエンド開発 > 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. Authenticate: HMAC-SHA-256 を使用して、暗号化された文字列の MAC (メッセージ認証コード) を計算します。暗号化された文字列と MAC を組み合わせて、最終的な暗号化結果を生成します。

復号化プロセス

  1. 認証: を再計算します。暗号化された結果の MAC を取得し、含まれている MAC と比較します。異なる場合は中止します。
  2. 復号化: 正しいキーを使用して暗号化された文字列を復号化します。

重要な考慮事項

  • 認証された暗号化アルゴリズムを使用します (例: AES-GCM、 ChaCha20-Poly1305) を暗号化と認証の両方に使用します。
  • 堅牢な暗号化および復号化機能のために、libsodium や defuse/php-encryption などの安全なライブラリを利用します。
  • 潜在的なセキュリティ リスクのため、独自の暗号化を使用しないでください。 .
  • CSPRNG を使用して IV (初期化ベクター) を生成する(暗号的に安全な擬似乱数ジェネレーター)random_bytes やsodium_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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート