【问题标题】:How to set Padding Mode with Ruby/OpenSSL decryption / encryption?如何使用 Ruby/OpenSSL 解密/加密设置填充模式?
【发布时间】:2023-03-30 04:45:01
【问题描述】:

我从下面的C#加密代码开始,想用Ruby解密。我的问题是我不知道如何在Ruby/OpenSSL 中设置填充模式。我特别需要使用PKCS7

C# 加密

System.Security.Cryptography.Aes c = new System.Security.Cryptography.AesManaged();
c.Mode = CipherMode.CBC;
c.Padding = PaddingMode.PKCS7;   # <-- how to set this in Ruby world?
c.KeySize = 256;
c.BlockSize = 128;
c.Key = key;
c.IV = iv;
...

Ruby解密

d = OpenSSL::Cipher.new('AES-128-CBC') # oops, this should have been AES-256-CBC
d.decrypt
d.key = key
d.iv  = iv
...

我目前正在使用Ruby 1.9.2,但可以使用任何必要的版本。

【问题讨论】:

    标签: c# ruby openssl padding ruby-1.9.2


    【解决方案1】:

    构造函数参数实际上读取&lt;name&gt;-&lt;key length&gt;-&lt;mode&gt;,所以首先,您可能想使用AES-256-CBC 以使用256 位密钥。 [source]

    无论如何,AES 块大小固定为 128 位,因此您无需调整此参数。 [source]

    另外,Ruby 似乎默认使用 PKCS7 Padding,所以也不需要调整它。 [source]

    因此,你应该很高兴

    c = OpenSSL::Cipher.new('AES-256-CBC')
    c.decrypt
    c.key = key
    c.iv = iv
    

    【讨论】:

    • 感谢您的回答。我已经按照您的建议更改了密码,并且解密 似乎 已经成功,尽管我实际上无法确认这一点,因为我现在遇到了膨胀解密数据的问题(可能是 @987654330 之间的问题@ 和 Ruby 回复:Zlib 放气和充气)。无论如何,关于 Ruby 的默认填充,我找到了an SO answer saying that PKCS5 is the defaultdocumentation 对这个细节保持沉默(或者至少我没有找到它)。
    • 关于填充的 Wiki 文章说“PKCS5 填充与 PKCS7 相同,只是在技术上它只能用于填充 64 位块。实际上两者可以互换使用。” (en.wikipedia.org/wiki/Padding_(cryptography)) 所以 AES 不能根据定义使用 PKCS5 填充,因为块大小固定为 128 (>64)
    • 如果此答案更新为包括如何在 ruby​​ 中指定填充和其他参数,它对某些人(比如我)仍然会有所帮助。谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 2015-03-09
    • 1970-01-01
    • 2011-10-24
    • 2018-12-25
    相关资源
    最近更新 更多