Maison > développement back-end > tutoriel php > Comment puis-je chiffrer et décrypter en toute sécurité des chaînes en PHP à l'aide de bibliothèques établies ?

Comment puis-je chiffrer et décrypter en toute sécurité des chaînes en PHP à l'aide de bibliothèques établies ?

Barbara Streisand
Libérer: 2024-12-17 10:06:24
original
975 Les gens l'ont consulté

How Can I Securely Encrypt and Decrypt Strings in PHP Using Established Libraries?

Cryptage et déchiffrement de chaînes en PHP

Éviter les pièges courants

Avant de se plonger dans l'implémentation du cryptage et du déchiffrement, il est crucial de comprendre la différence entre le cryptage et l'authentification. Pour une protection sécurisée des données, le cryptage authentifié est recommandé plutôt que le cryptage simple. De plus, il est conseillé d'éviter de créer des implémentations de cryptographie personnalisées et de s'appuyer plutôt sur des bibliothèques sécurisées et bien établies comme libsodium ou defuse/php-encryption.

Cryptage et décryptage

Cryptage :

  1. Crypter les données à l'aide AES-CTR ou GCM (recommandé).
  2. Authentifier le texte chiffré à l'aide de HMAC-SHA-256 (ou Poly1305 pour les chiffrements par flux).

Déchiffrement :

  1. Vérifiez le MAC du texte chiffré (si vous n'utilisez pas Poly1305 ou GCM).
  2. Déchiffrer le message.

Mise en œuvre avec Libsodium

use Sodium\Crypto\SecretBox;

$key = random_bytes(SecretBox::KEYBYTES);
$nonce = random_bytes(SecretBox::NONCEBYTES);

$ciphertext = SecretBox::encrypt($message, $nonce, $key);
$plaintext = SecretBox::decrypt($ciphertext, $nonce, $key);
Copier après la connexion

Mise en œuvre avec defuse/php-encryption

use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;

$key = Key::createNewRandomKey();

$ciphertext = Crypto::encrypt($message, $key);
$plaintext = Crypto::decrypt($ciphertext, $key);
Copier après la connexion

Considérations supplémentaires

  • Évitez de compresser les données avant le chiffrement.
  • Utilisez des fonctions sécurisées telles que mb_strlen() et mb_substr() pour la manipulation de chaînes.
  • Générer des IV en utilisant un CSPRNG (par exemple, random_bytes()).
  • Évitez d'utiliser des fonctions telles que bin2hex() ou base64_encode() pour des fuites d'informations potentielles.
  • Authentifiez toujours le texte chiffré (MAC) après cryptage.

Précautions

  • Ne cryptez pas les mots de passe ; utilisez plutôt des algorithmes de hachage de mot de passe.
  • Ne cryptez pas les paramètres d'URL ; ce n'est pas la solution appropriée.

Exemple avec Libsodium

use Sodium\Crypto\SecretBox;

$key = random_bytes(SecretBox::KEYBYTES);
$nonce = random_bytes(SecretBox::NONCEBYTES);

$ciphertext = SecretBox::encrypt($message, $nonce, $key);
$plaintext = SecretBox::decrypt($ciphertext, $nonce, $key);

echo "Ciphertext: " . $ciphertext . PHP_EOL;
echo "Plaintext: " . $plaintext . PHP_EOL;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal