PHP 文字列の暗号化と復号化
質問:
PHP 文字列を暗号化および復号化するにはどうすればよいですか。元の文字列と両方のソルトまたはキーの両方が必要ですプロセス?
答え:
続行する前に、暗号化と認証の違いを理解することが重要です。堅牢なセキュリティを確保するには、暗号化してから認証する暗号化認証をお勧めします。
独自の暗号を作成することは避けてください。代わりに、暗号化の専門家によって開発された信頼できるライブラリを利用してください。使いやすさと組み込みの認証暗号化のため、libsodium または defuse/php-encryption を使用することを強くお勧めします。
暗号化手順:
復号化手順:
設計上の考慮事項:
使用しない場合暗号化:
リブナトリウムPHP例:
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 ) ); return $cipher; }
Libsodium 復号化:
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 ); return $plain; }
defuse/php-encryption 例:
use Defuse\Crypto\Crypto; use Defuse\Crypto\Key; $message = 'We are all living in a yellow submarine'; $key = Key::createNewRandomKey(); $ciphertext = Crypto::encrypt($message, $key); $plaintext = Crypto::decrypt($ciphertext, $key);
以上がLibsodium または defuse/php-encryption を使用して PHP 文字列を安全に暗号化および復号化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。