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

时间:2011-08-11 05:54:38

标签: python ruby pycrypto

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

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

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

请帮忙......

2 个答案:

答案 0 :(得分:3)

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

使用PyCrypto时,必须在Python中完成填充manually

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

答案 1 :(得分:0)

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