Problème avec mcrypt de php

Résolu/Fermé
Utilisateur anonyme - 29 juil. 2017 à 13:35
 Utilisateur anonyme - 29 juil. 2017 à 18:31
Bonjour, j'ai actuellement un problème avec la fonction mcrypt.
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:

2 réponses

Utilisateur anonyme
29 juil. 2017 à 18:31
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);
    }
}
1
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié le 29 juil. 2017 à 14:31
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:
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.
0
Utilisateur anonyme
29 juil. 2017 à 18:05
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
0
Utilisateur anonyme
29 juil. 2017 à 18:20
Finalement, j'ai trouvé :
$plaintext_dec = trim($plaintext_dec);

Merci beaucoup de m'avoir aidé :)
0