Problème avec mcrypt de php
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour, j'ai actuellement un problème avec la fonction mcrypt.
Voici le code :
Et voici le résultat que j'obtiens :
Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.
Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.
La décryption n'a pas fonctionné correctement
Quand je regarde le code source de la page, j'obtiens :
Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding. avec 15 caractères inconnus derrières :/
Merci de bien vouloir m'aider
Nils0
Voici le code :
$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); $plaintext = "Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding."; $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,$plaintext, MCRYPT_MODE_CBC, $iv); $ciphertext = $iv . $ciphertext; $ciphertext_base64 = base64_encode($ciphertext); # --- DECHIFFREMENT --- $ciphertext_dec = base64_decode($ciphertext_base64); $iv_dec = substr($ciphertext_dec, 0, $iv_size); $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; echo '<br />'.$plaintext; if($plaintext == $plaintext_dec){ echo '<br />La décryption a fonctionné correctement'; } else { echo '<br />La décryption n\'a pas fonctionné correctement'; }
Et voici le résultat que j'obtiens :
Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.
Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.
La décryption n'a pas fonctionné correctement
Quand je regarde le code source de la page, j'obtiens :
Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding. avec 15 caractères inconnus derrières :/
Merci de bien vouloir m'aider
Nils0
A voir également:
- Problème avec mcrypt de php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Saut de ligne php - Forum PHP
2 réponses
Pour ceux qui veulent le code finale, le voici :
function generate_key($size){ if($size > 0){ return bin2hex(openssl_random_pseudo_bytes($size)); } } function crypter($chaine, $key){ if($chaine != null){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $chaine, MCRYPT_MODE_CBC, $iv); $ciphertext = $iv . $ciphertext; $ciphertext_base64 = base64_encode($ciphertext); return $ciphertext_base64; } } function decrypter($chaine_crypter, $key){ if($chaine_crypter != null){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $ciphertext_dec = base64_decode($chaine_crypter); $iv_dec = substr($ciphertext_dec, 0, $iv_size); $ciphertext_dec = substr($ciphertext_dec, $iv_size); $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec); return trim($plaintext_dec); } }
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, je vois deux éléments, y aurait-il un lien entre les deux?
1) il y a 4 caractères de valeur 00h à la fin de $plaintext_dec, comparé à $plaintext
2) ton commentaire "On doit supprimer les caractères de valeur 00h de la fin du texte plein"
d'où vient le commentaire?
suggestion pour bien voir les différences:
tiens, la chaîne décryptée à une longueur multiple de 8 octets!
il est, je pense, nécessaire de mémoriser la longueur de la chaîne avant encryption. moi je rajouterais cette information dans le texte avant encryption.
1) il y a 4 caractères de valeur 00h à la fin de $plaintext_dec, comparé à $plaintext
2) ton commentaire "On doit supprimer les caractères de valeur 00h de la fin du texte plein"
d'où vient le commentaire?
suggestion pour bien voir les différences:
echo '<br />'.strlen($plaintext_dec); echo '<br />'.strlen($plaintext); echo '<br />'.bin2hex($plaintext_dec); echo '<br />'.bin2hex($plaintext);
tiens, la chaîne décryptée à une longueur multiple de 8 octets!
il est, je pense, nécessaire de mémoriser la longueur de la chaîne avant encryption. moi je rajouterais cette information dans le texte avant encryption.
Bonjour, merci d'avoir prit le temps de répondre, le code provient de cette page : https://www.php.net/manual/fr/function.mcrypt-encrypt.php
je vois bien la différence mais comment régler se problème :/ ?
merci d'avance
je vois bien la différence mais comment régler se problème :/ ?
merci d'avance