(PHP 4 >= 4.0.2, PHP 5, PHP 7)
mcrypt_encrypt — Chiffre un texte
$cipher
, string $key
, string $data
, string $mode
[, string $iv
] )mcrypt_encrypt() chiffre les données, et retourne les données chiffrées.
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 la taille de la clé
fournie n'est pas supportée par le cipher, la fonction émettra un
warning et retournera FALSE
data
Les données qui seront chiffrées, avec le cipher
et le
mode
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 la taille de l'IV fourni n'est pas supporté par le mode d'opération ou si vous ne fournissez pas d'IV, mais que le mode d'opération en requiert un, la fonction émettra un avertissement et retournera FALSE
.
Retourne les données chiffrées, sous forme de chaîne de caractères ou FALSE
si une erreur survient.
Version | Description |
---|---|
5.6.0 |
Des tailles de clés et IV invalides ne sont plus acceptées.
mcrypt_encrypt() va maintenant émettre un
warning et retourner FALSE . Précédemment les
clés et IVs étaient complétées avec des '\0' jusqu'a
la prochaine taille valide.
|
Exemple #1 Exemple avec mcrypt_encrypt()
<?php
# --- CHIFFREMENT ---
# 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 "Taille 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 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, MCRYPT_MODE_CBC, $iv);
# On ajoute le IV au début du texte chiffré pour le rendre disponible pour le déchiffrement
$ciphertext = $iv . $ciphertext;
# Encode le texte chiffré résultant pour qu'il puisse être représenté par une chaîne de caractères
$ciphertext_base64 = base64_encode($ciphertext);
echo $ciphertext_base64 . "\n";
# === ATTENTION ===
# Le texte chiffré résultant ne contient aucune intégrité ni d'authentification
# et il n'est pas protégé contre 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_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
echo $plaintext_dec . "\n";
?>
L'exemple ci-dessus va afficher :
Taille de la clé : 32 ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU= Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.