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()
を使えば、データの機密性を保ちながら、高速で安全な処理を実現できます。