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

5
我需要使用Ruby加密一段文本。我已经使用了Ruby-Openssl宝石来实现这个目的。然后,将这段加密文本传递给一个Python程序进行解密。我使用了Pycrypto来完成解密。
问题在于,在Pycrypto中,我们必须手动指定填充约定。而在Ruby中,填充是自动完成的。我正在使用AES-CBC块密码模式。这种填充会导致问题,因为在Python中无法正确地执行剥离。例如,以下是Ruby和Python中加密文本的base64编码:
Python: aENJY28lvE89yY2T/te8vWwdeoeSqSwwlrOAv7b3AWw=
Ruby:   aENJY28lvE89yY2T/te8vVoQE6JNxdSRgYXC8mqF3nI=

Please help...

2个回答

3
OpenSSL默认应用PKCS#5填充,因此在AES-CBC模式下使用OpenSSL::Cipher加密数据时也会自动使用此填充(参见OpenSSL docs)。因此,在使用Ruby时不需要执行手动填充。
当使用PyCrypto时,在Python中必须手动进行填充。
一旦在Python中应用了此填充方案,两个加密的Base64字符串应该匹配。

我尝试使用M2Crypto。不幸的是,它似乎无法与链接中提供的程序配合工作。我将尝试应用PKCS#5填充。 - vishy1618

0

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


在PyCrypto中,填充可以手动操作,也就是说,您可以指定填充的逻辑。而在Ruby中,填充是自动完成的,我没有看到任何配置它的方法,除了在Python中复制逻辑。 - vishy1618
你需要在Python中自动完成Ruby所做的工作,或者在两种语言中都手动完成。 - agf
我还没有找到在Ruby中手动完成它的方法。这让我只能修改我的Python程序,但我不知道如何在Ruby-Openssl中进行填充。 - vishy1618

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接