当填充块加密时,OpenSSL :: Cipher使用什么填充方案?文件很模糊。
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/Cipher.html#method-i-padding-3D
我需要使用不同语言的加密数据。我知道有很多类型的填充:
https://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Padding
答案 0 :(得分:4)
您的第一个链接建议
有关详细信息,请参阅EVP_CIPHER_CTX_set_padding。
This page表示(强调我的):
如果启用填充(默认值),则EVP_EncryptFinal_ex() 加密“最终”数据,即保留在数据中的任何数据 部分阻挡。 它使用标准块填充(也就是PKCS填充)。 加密的最终数据写入应该有足够的 一个密码块的空间。写入的字节数放入 OUTL。调用此函数后,加密操作为 已完成,不应再调用EVP_EncryptUpdate()。
该页面还包含指向additional information that you may find helpful的链接。
答案 1 :(得分: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的倍数(AES中的块大小),则添加另外1个填充16字节16的块
答案 2 :(得分:3)
您可以通过解密在解密方法中设置了NoPadding
的邮件来确认正在使用的填充。这将通过任何填充,就好像它是实际消息的一部分。从消息中查看最后一个块的字节值。这将告诉您发件人正在使用什么类型的填充。然后设置解密函数以期望填充类型。