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

5 投票
2 回答
1883 浏览
提问于 2025-04-16 23:21

我需要用Ruby来加密一段文本。为此,我使用了Ruby-Openssl这个库。加密后的文本会传给一个Python程序,我需要用这个程序来解密它。我在Python中使用了Pycrypto这个库。

问题是,在Pycrypto中,我们需要手动指定填充方式。而在Ruby中,填充是自动完成的。我使用的是AES-CBC这种加密模式。这个填充方式在Python中处理时会出现问题,因为它无法正确去掉填充。举个例子,这里是用Ruby和Python加密后的文本的base64编码:

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

请帮帮我...

2 个回答

0

看起来你需要在这两种情况下都指定正确的填充模式。填充是加密流的一个基本属性,发送方和接收方必须使用相同的填充方式。

3

OpenSSL 默认使用 PKCS#5Padding,所以在用 OpenSSL::Cipher 进行 AES-CBC 模式加密时,这个填充方式会自动应用(具体可以参考 OpenSSL 的 文档)。因此,在使用 Ruby 时,不需要手动进行填充。

而在 Python 中,如果使用 PyCrypto,就需要 手动进行填充。

一旦你在 Python 中应用了这个填充方案,两个加密后的 Base64 字符串应该是相同的。

撰写回答