Cryptage et déchiffrement des chaînes PHP
Question :
Comment pouvons-nous chiffrer et décrypter une chaîne PHP, nécessitant à la fois une chaîne originale et un sel ou une clé pour les deux processus ?
Réponse :
Il est crucial de comprendre la différence entre le cryptage et l'authentification avant de continuer. Pour une sécurité renforcée, nous recommandons l'authentification cryptée, qui implique le cryptage puis l'authentification.
Évitez de créer votre propre cryptographie ; utilisez plutôt une bibliothèque fiable développée par des spécialistes de la cryptographie. Nous vous conseillons fortement d'utiliser libsodium ou defuse/php-encryption en raison de leur facilité d'utilisation et de leur cryptage authentifié intégré.
Étapes de cryptage :
Étapes de décryptage :
Considérations de conception :
Quand ne pas utiliser le chiffrement :
Exemple PHP Libsodium :
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 Décryptage :
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 Exemple :
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);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!