2009-11-20 63 views
0

我的代码:ç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.我认为这是B/C填充。但是,即使我的SIZE是10000,Olen仍然是10008.我在这里听不懂。由于10000%8 = 0,为什么我们需要再填充8个字节?同样,SIZE = 10008到10015,olen是10016.

回答

2

总是需要至少有一个填充字节 - 所以这意味着如果你的输入大小是块大小的确切倍数,你将有一个整个填充块。

需要至少有一个字节的原因是,当解密操作完成时,您需要检查填充以确定要剥离多少。如果没有填充,那么您将检查数据的最后一个字节 - 这可能巧合地看起来像填充,导致您错误地删除它。