Ruby-OpenSSL、PyCrypto 之间的 AES 加密/解密

发布于 2024-11-28 18:38:45 字数 398 浏览 0 评论 0原文

我必须使用 Ruby 加密一段文本。为此,我使用了 Ruby-Openssl gem。这个加密的文本被传递给一个 python 程序,我必须使用它来解密它。我为此目的使用了 Pycrypto。

问题是,在 Pycrypto 中我们必须手动指定填充约定。在 Ruby 中,填充是自动完成的。我正在使用 AES-CBC 分组密码模式。这种填充会导致问题,因为它的剥离无法在 Python 中正确执行。例如,这些是 Ruby 和 Python 中加密文本的 Base64 编码:

Python: aENJY28lvE89yY2T/te8vWwdeoeSqSwwlrOAv7b3AWw=
Ruby:   aENJY28lvE89yY2T/te8vVoQE6JNxdSRgYXC8mqF3nI=

请帮忙...

I have to encrypt a piece of text using Ruby. I've used the Ruby-Openssl gem for that purpose. This encrypted text is them passed to a python program using which I have to decrypt it. I've used Pycrypto for the purpose.

The problem is, in Pycrypto we have to specify the padding convention manually. In Ruby, the padding is done automatically. I'm using AES-CBC block cipher mode. This padding causes problems as its stripping cannot be performed properly in Python. As an example, these are the base64 encodings of an encrypted text in both Ruby and Python:

Python: aENJY28lvE89yY2T/te8vWwdeoeSqSwwlrOAv7b3AWw=
Ruby:   aENJY28lvE89yY2T/te8vVoQE6JNxdSRgYXC8mqF3nI=

Please help...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

违心° 2024-12-05 18:38:45

OpenSSL 默认情况下应用 PKCS#5Padding,因此在 AES-CBC 模式下使用 OpenSSL::Cipher 加密数据时也会自动使用它(参见 OpenSSL 文档)。因此,使用 Ruby 时无需执行手动填充。

使用 PyCrypto 时,必须在 Python 中手动完成填充。

在 Python 中应用此填充方案后,两个加密的 Base64 字符串应该匹配。

OpenSSL applies PKCS#5Padding by default, so this is also used automatically when encrypting data with OpenSSL::Cipher in AES-CBC mode (cf. OpenSSL docs). So there's no need to perform manual padding when using Ruby.

The padding has to be done manually in Python when using PyCrypto.

Once you apply this padding scheme in Python, both encrypted Base64 strings should match.

掩饰不了的爱 2024-12-05 18:38:45

看来您需要指定在这两种情况下使用的正确填充模式 - 填充是密码流的基本属性,并且必须在接收器和发送器上匹配。

It appears you need to be specifying the correct padding mode to use in both cases - padding is a fundamental property of a cipher stream, and must be matched on both receiver and sender.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文