3

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

4

3 回答 3

4

您的第一个链接建议

有关详细信息,请参阅 EVP_CIPHER_CTX_set_padding。

该页面表明(强调我的):

如果启用了填充(默认),则 EVP_EncryptFinal_ex() 加密“最终”数据,即保留在部分块中的任何数据。它使用标准块填充(又名 PKCS 填充)。将加密的最终数据写入应该有足够空间容纳一个密码块的地方。写入的字节数放在 outl 中。调用此函数后,加密操作完成,不应再调用 EVP_EncryptUpdate()。

该页面还包含指向您可能会发现有用的其他信息的链接。

于 2013-07-25T23:50:52.353 回答
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 的块

于 2013-07-26T00:13:43.960 回答
3

NoPadding您可以通过在解密方法中使用 set解密消息来确认正在使用什么填充。这将通过任何填充,就好像它是实际消息的一部分一样。查看消息中最后一个块的字节数。这将告诉您发送者正在使用什么类型的填充。然后将您的解密函数设置为期望该类型的填充。

于 2013-07-26T13:43:23.907 回答