2009-11-20 1 views
0

Мой код:C размер 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; 

Если мой SIZE = от 10001 до 10007, то Олен всегда 10008. Я думаю, что это б/с отступов. Но, даже мой РАЗМЕР - 10000, олень все еще 10008. Я не понимаю здесь. Поскольку 10000% 8 = 0, зачем нам загружать еще 8 байтов? Аналогично, SIZE = 10008-110015, олен составляет 10016.

ответ

2

Всегда должно быть по крайней мере один байт заполнения - это означает, что если ваш размер ввода является точным кратным размеру блока, у вас будет весь блок отступов.

Причина, по которой должен быть по крайней мере один байт, заключается в том, что при завершении операции дешифрования вам необходимо изучить отступы, чтобы выяснить, сколько нужно снять. Если бы не было отступов, вы бы изучили последние байты данных - и это могло бы походить на заполнение, из-за чего вы ошибочно разделили его.

 Смежные вопросы

  • Нет связанных вопросов^_^