2013-07-25 58 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

相关问题