PHP 文字列を暗号化および復号化する方法
暗号化について議論するときは、暗号化と認証を区別することが重要です。通常は、暗号化とメッセージ認証コード (MAC) を組み合わせた認証付き暗号化が推奨されます。セキュリティを確保するために、独自の暗号化の実装を避け、代わりに暗号化の専門家によって開発およびレビューされた十分に確立されたライブラリに依存することを強くお勧めします。
libsodium を使用した暗号化手順:
libsodium を使用した復号化手順:
追加の考慮事項:
libsodium を使用したコード例:
<?php declare(strict_types=1); /** * Encrypt a message * * @param string $message - message to encrypt * @param string $key - encryption key * @return string * @throws RangeException */ function safeEncrypt(string $message, string $key): string { if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { throw new RangeException('Key is not the correct size (must be 32 bytes).'); } $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); $cipher = base64_encode( $nonce. sodium_crypto_secretbox( $message, $nonce, $key ) ); sodium_memzero($message); sodium_memzero($key); return $cipher; } /** * Decrypt a message * * @param string $encrypted - message encrypted with safeEncrypt() * @param string $key - encryption key * @return string * @throws Exception */ function safeDecrypt(string $encrypted, string $key): string { $decoded = base64_decode($encrypted); $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit'); $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit'); $plain = sodium_crypto_secretbox_open( $ciphertext, $nonce, $key ); if (!is_string($plain)) { throw new Exception('Invalid MAC'); } sodium_memzero($ciphertext); sodium_memzero($key); return $plain; } ?>
以上がlibsodium を使用して PHP 文字列を安全に暗号化および復号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。