【问题标题】:What kind of padding does Rails OpenSSL::Cipher use for AES-CBC-256?Rails OpenSSL::Cipher 为 AES-CBC-256 使用什么样的填充?
【发布时间】:2013-07-26 01:59:28
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    你的第一个链接建议

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

    This page 表示(强调我的):

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

    该页面还包含指向additional information that you may find helpful 的链接。

    【讨论】:

    • 谢谢。在 Ruby 文档中找不到 EVP_CIPHER_CTX_set_padding。
    【解决方案2】:

    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 的块

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢。我发现 PHP 使用 \0 填充。
      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 2013-08-11
      • 2017-08-28
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多