PHPのcrypto_stream_xor()を使ったデータの暗号化と復号化の方法

PHP

PHPでの安全なデータの暗号化と復号化を行いたい場合、Libsodiumライブラリのcrypto_stream_xor()関数は非常に便利です。この関数を使用すると、秘密鍵とnonce(ランダム値)を使ってデータを暗号化し、同じ関数で復号化も可能です。

関数の構文

string crypto_stream_xor(string $message, string $nonce, string $key);
  • message: 暗号化するメッセージ。これは文字列で指定されます。
  • nonce: 各暗号化操作に一度だけ使われるランダムな値。
  • key: 秘密鍵。このキーが暗号化と復号化に使用されます。

crypto_stream_xor()は、同じ鍵とnonceを使うことで、暗号化されたメッセージを復号化できます。メッセージは、単純にXOR演算を使って暗号化・復号化されるため、高速かつ効率的です。

使い方の例

次に、crypto_stream_xor()を使ってメッセージを暗号化・復号化する例を紹介します。

// ランダムな秘密鍵とnonceを生成
$key = random_bytes(SODIUM_CRYPTO_STREAM_KEYBYTES);
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_NONCEBYTES);

// 暗号化するメッセージ
$message = "秘密のメッセージ";

// メッセージを暗号化
$ciphertext = sodium_crypto_stream_xor($message, $nonce, $key);
echo "暗号化されたメッセージ: " . bin2hex($ciphertext) . "\n";

// 同じnonceとkeyを使ってメッセージを復号化
$decrypted_message = sodium_crypto_stream_xor($ciphertext, $nonce, $key);
echo "復号化されたメッセージ: " . $decrypted_message . "\n";

実行結果

この例では、メッセージを暗号化し、それを同じ鍵とnonceで復号化しています。出力は次のようになります。

暗号化されたメッセージ: <暗号化された16進数データ>
復号化されたメッセージ: 秘密のメッセージ

まとめ

crypto_stream_xor()は、効率的で安全なデータの暗号化・復号化を実現するための関数です。非対称暗号化のような複雑な操作ではなく、シンプルなXOR演算を用いているため、非常に高速に動作します。大容量データの処理やストリームデータの暗号化に最適です。


crypto_stream_xor()を使えば、データの機密性を保ちながら、高速で安全な処理を実現できます。

タイトルとURLをコピーしました