mcrypt_encrypt
(PHP 4 >= 4.0.2, PHP 5)
mcrypt_encrypt — Chiffre un texte
Description
$cipher
, string $key
, string $data
, string $mode
[, string $iv
] )mcrypt_encrypt() chiffre les données, et retourne les données chiffrées.
Liste de paramètres
-
cipher
-
Une constante parmi les constantes
MCRYPT_ciphername
, ou le nom de l'algorithme, sous la forme d'une chaîne de caractères. -
key
-
La clé avec laquelle les données seront chiffrées. Si elle est plus petite que sa taille demandée, elle sera complétée avec des '\0'. Il est mieux de ne pas utiliser des clés ASCII.
Il est recommandé d'utiliser les fonctions mhash pour créer des clés à partir d'une chaîne.
-
data
-
Les données qui seront chiffrées, avec le
cipher
et lemode
indiqué. Si la taille des données n'est pas un multiple de la taille de bloc, les données seront complétées par des caractères '\0', autant que nécessaire.Le texte chiffré retourné peut être plus long que la taille des données passées en argument via
data
. -
mode
-
Une constantes parmi les constantes
MCRYPT_MODE_modename
, ou une des chaînes suivantes : "ecb", "cbc", "cfb", "ofb", "nofb" ou "stream". -
iv
-
Utilisé pour l'initialisation des modes CBC, CFB, OFB, ainsi que dans quelques algorithmes du mode STREAM. Si vous ne fournissez pas un IV, alors que cela est nécessaire pour l'algorithme, la fonction émettra une alerte et utilisera un IV dont tous les octets vaudront "\0".
Valeurs de retour
Retourne les données chiffrées, sous forme de chaîne de caractères.
Exemples
Exemple #1 Exemple avec mcrypt_encrypt()
<?php # --- CHRIFFREMENT --- # la clé devrait être un binaire aléatoire, utilisez la fonction scrypt, bcrypt # ou PBKDF2 pour convertir une chaîne de caractères en une clé. # La clé est spécifiée en utilisant une notation héxadécimale. $key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3"); # Montre la taille de la clé utilisée ; soit des clés sur 16, 24 ou 32 octets pour # AES-128, 192 et 256 respectivement. $key_size = strlen($key); echo "Talle de la clé : " . $key_size . "\n"; $plaintext = "Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding."; # Crée un IV aléatoire à utiliser avec l'encodage CBC $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); # Crée un encodage explicite pour le texte plein $plaintext_utf8 = utf8_encode($plaintext); # Crée un texte cipher compatible avec AES (Rijndael block size = 128) # pour conserver le texte confidentiel. # Uniquement applicable pour les entrées encodées qui ne se terminent jamais # pas la valeur 00h (en raison de la suppression par défaut des zéros finaux) $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext_utf8, MCRYPT_MODE_CBC, $iv); # On ajoute à la fin le IV pour le rendre disponible pour le chiffrement $ciphertext = $iv . $ciphertext; # Encode le texte du cipher résultant pouvant être représenté ainsi sous forme de chaîne de caractères $ciphertext_base64 = base64_encode($ciphertext); echo $ciphertext_base64 . "\n"; # === ATTENTION === # Le texte du cipher résultant ne contient aucune intégrité ni d'authentification # et il n'est pas protégé par des attaques de type "oracle padding". # --- DECHIFFREMENT --- $ciphertext_dec = base64_decode($ciphertext_base64); # Récupère le IV, iv_size doit avoir été créé en utilisant la fonction # mcrypt_get_iv_size() $iv_dec = substr($ciphertext_dec, 0, $iv_size); # Récupère le texte du cipher (tout, sauf $iv_size du début) $ciphertext_dec = substr($ciphertext_dec, $iv_size); # On doit supprimer les caractères de valeur 00h de la fin du texte plein $plaintext_utf8_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec); echo $plaintext_utf8_dec . "\n"; ?>
L'exemple ci-dessus va afficher :
Talle de la clé : 32 ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU= Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.
Voir aussi mcrypt_module_open() pour une meilleure API et un exemple.