2013-07-25 85 views

回答

4

你的第一個鏈接到建議

見EVP_CIPHER_CTX_set_padding進一步的信息。

This page指示(重點礦山)說:

如果填充已啓用(默認設置),然後EVP_EncryptFinal_ex() 加密``最後'的數據,那就是保留在任何數據 部分塊。 它使用標準塊填充(又名PKCS填充)。 加密的最終數據被寫出來,其中應該有足夠的空間用於一個密碼塊。寫入的字節數放在 outl中。在調用此函數後,加密操作完成,並且不應再調用EVP_EncryptUpdate()。

該頁面還包含指向additional information that you may find helpful的鏈接。

+0

謝謝。在Ruby文檔中找不到EVP_CIPHER_CTX_set_padding。 – Chloe

3

PKCS#7/PKSC#5對於CBC模式很常見。 PKCS#5相同PKCS#7,但PKCS#5僅指64位(8字節)的塊大小因此對於AES-256它是PKCS#7

從en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7

01 
02 02 
03 03 03 
04 04 04 04 
05 05 05 05 05 
etc. 

如果您的MSG大小是填充字節16的16次加入

16(在AES的塊大小),則更多的塊的倍數
3

可以確認正在使用的填充通過解密的消息與NoPadding集在你的解密方法中。這將通過任何填充,就像它是實際消息的一部分一樣。查看消息中最後一個塊的字節值。這將告訴你發件人正在使用哪種類型的填充。然後設置你的解密函數來期待這種類型的填充。

+0

+1雖然我確實會先查找文檔... –

+0

謝謝。我發現PHP使用\ 0填充。 – Chloe

相關問題