2009-11-20 8 views
0

Mon code:C taille du bloc OpenSSL

EVP_DecryptInit (&ctx, EVP_des_cbc(), key, iv); 
    if (EVP_DecryptUpdate (&ctx, outbuf, &olen, inbuff, in_length) != 1) 
    { 
     fprintf (stderr, "error in decrypt update\n"); 
     return -1; 
    } 
    if (EVP_DecryptFinal (&ctx, outbuf + olen, &tlen) != 1) 
    { 
     fprintf (stderr, "error in decrypt final\n"); 
     return -1; 
    } 
    olen += tlen; 

Si ma taille = 10001-10007 alors le Olen est toujours 10008. Je pense qu'il est b/c de rembourrage. Mais, même ma taille est 10000, l'olen est toujours 10008. Je ne comprends pas ici. Puisque 10000% 8 = 0, pourquoi avons-nous besoin de tamponner 8 octets de plus? De même, SIZE = 10008 à 10015, olen est 10016.

Répondre

2

Il doit toujours y avoir au moins un octet de remplissage - donc cela signifie que si votre taille d'entrée est un multiple exact de la taille du bloc, vous aurez un bloc entier de rembourrage.

La raison pour laquelle il doit y avoir au moins un octet est que, lorsque l'opération de décryptage se termine, vous devez examiner le bourrage pour déterminer combien il faut enlever. S'il n'y avait pas de remplissage, alors vous examineriez les derniers octets de données - et cela pourrait ressembler par coïncidence à un rembourrage, vous obligeant à le désaligner à tort.