ホームページ > バックエンド開発 > 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. を復号化しますmessage.

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 中国語 Web サイトの他の関連記事を参照してください。

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