2009-11-20 101 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

總是需要至少有一個填充字節 - 所以這意味着如果你的輸入大小是塊大小的確切倍數,你將有一個整個填充塊。

需要至少有一個字節的原因是,當解密操作完成時,您需要檢查填充以確定要剝離多少。如果沒有填充,那麼您將檢查數據的最後一個字節 - 這可能巧合地看起來像填充,導致您錯誤地刪除它。