5

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

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

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

请帮忙...

4

2 回答 2

3

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

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

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

于 2011-08-11T08:44:13.500 回答
0

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

于 2011-08-11T06:11:25.217 回答