Rails OpenSSL :: Cipher用于AES-CBC-256的填充是什么?

时间:2013-07-25 23:31:46

标签: ruby-on-rails encryption openssl aes cbc-mode

当填充块加密时,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

3 个答案:

答案 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#5PKCS#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的邮件来确认正在使用的填充。这将通过任何填充,就好像它是实际消息的一部分。从消息中查看最后一个块的字节值。这将告诉您发件人正在使用什么类型的填充。然后设置解密函数以期望填充类型。