Comment chiffrer et déchiffrer une chaîne PHP avec une clé
Le chiffrement et le déchiffrement de chaînes en PHP impliquent l'utilisation de techniques cryptographiques pour protéger les informations sensibles.
Cryptage
Pour chiffrer une chaîne à l'aide d'un clé secrète :
-
Utiliser AES en mode CTR : Chiffrer la chaîne à l'aide de l'Advanced Encryption Standard (AES) en mode Compteur (CTR).
-
Authentifier le texte chiffré : Calculez un code d'authentification de message basé sur le hachage (HMAC) sur le IV et le texte chiffré à l'aide HMAC-SHA-256 ou Poly1305 (pour les chiffrements de flux).
Déchiffrement
Pour déchiffrer une chaîne chiffrée en utilisant la même clé :
-
Vérifiez le MAC : Recalculez le MAC et comparez-le à celui enregistré un.
-
Déchiffrez le message :Déchiffrez le texte chiffré à l'aide d'AES en mode CTR.
Autres considérations
- Évitez de compresser les données avant le chiffrement.
- Utilisez mb_strlen() et mb_substr() avec le jeu de caractères « 8 bits » pour éviter les problèmes.
- Générez des IV à l'aide d'un CSPRNG et évitez MCRYPT_RAND.
- Cryptez toujours ensuite MAC pour garantir à la fois la confidentialité et l'authenticité.
Libsodium pour PHP
Si vous utilisez PHP 7.2 ou supérieur, pensez à utiliser la bibliothèque libsodium :
use ParagonIE\Halite\Symmetric\Crypto as SymmetricCrypto;
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
$ciphertext = SymmetricCrypto::encrypt($message, $key);
$plaintext = SymmetricCrypto::decrypt($ciphertext, $key);
defuse/php-encryption
Comme alternative à libsodium :
use Defuse\Crypto\Crypto;
$key = Key::createNewRandomKey();
$ciphertext = Crypto::encrypt($message, $key);
$plaintext = Crypto::decrypt($ciphertext, $key);
Mot de passe Considérations
-
Pour les mots de passe : Hachez-les à l'aide d'Argon2, scrypt, bcrypt ou PBKDF2-SHA256 avec des itérations élevées.
-
Pour l'authentification : Utilisez des algorithmes basés sur HMAC comme HKDF2 ou hash_hmac() au lieu de cryptage.
-
Pour les paramètres d'URL : Utilisez un framework ou une bibliothèque appropriée conçue pour la validation des paramètres d'URL et la protection contre la falsification.
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!
Déclaration: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