2009-09-14 4 views
0

Voici les fonctions de chiffrement et de déchiffrement:Mauvais résultat lors de l'utilisation mycrypt_cfb

function encrypt($key, $plain_text) { 
    $plain_text = trim($plain_text); 
    $iv = substr(md5($key), 0,mcrypt_get_iv_size (MCRYPT_CAST_256,MCRYPT_MODE_CFB)); 
    $c_t = mcrypt_cfb (MCRYPT_CAST_256, $key, $plain_text, MCRYPT_ENCRYPT, $iv); 
    return trim(chop(base64_encode($c_t))); 
} 

function decrypt($key, $c_t) { 
    $c_t = trim(chop(base64_decode($c_t))); 
    $iv = substr(md5($key), 0,mcrypt_get_iv_size (MCRYPT_CAST_256,MCRYPT_MODE_CFB)); 
    $p_t = mcrypt_cfb (MCRYPT_CAST_256, $key, $c_t, MCRYPT_DECRYPT, $iv); 
    return trim(chop($p_t)); 
} 

maintenant:

$key = "11111"; 
$str = "1000181"; 
echo decrypt($key,encrypt($key,$str)); 

Le résultat est 100018, manquant le dernier "1".
Pourquoi?

+3

Je ne peux pas le tester en ce moment, mais essayez de supprimer les appels trim & chop de la première ligne de decrypt(). – KiNgMaR

+1

S'il vous plaît [demandez à Jeff Atwood pourquoi ne pas jouer avec des primitives crypto] (http://www.codinghorror.com/blog/archives/001267.html). Je vous remercie. – derobert

+0

supprime les appels trim & chop de decrypt() a raison, merci KiNgMaR – anakin

Répondre

0

La solution est:

retirer les & appels chop garniture de Décrypter()

réponse était dans les commentaires, par KiNgMaR

Questions connexes