我必须使用 Ruby 加密一段文本。为此,我使用了 Ruby-Openssl gem。这个加密的文本被传递给一个 python 程序,我必须使用它来解密它。为此,我使用了 Pycrypto。
问题是,在 Pycrypto 中我们必须手动指定填充约定。在 Ruby 中,填充是自动完成的。我正在使用 AES-CBC 分组密码模式。这种填充会导致问题,因为它的剥离无法在 Python 中正确执行。例如,这些是 Ruby 和 Python 中加密文本的 base64 编码:
Python: aENJY28lvE89yY2T/te8vWwdeoeSqSwwlrOAv7b3AWw=
Ruby: aENJY28lvE89yY2T/te8vVoQE6JNxdSRgYXC8mqF3nI=
请帮忙...
最佳答案
OpenSSL 默认应用 PKCS#5Padding,因此在 AES-CBC 模式下使用 OpenSSL::Cipher
加密数据时也会自动使用它(参见 OpenSSL docs )。因此,在使用 Ruby 时无需执行手动填充。
填充必须完成manually在 Python 中使用 PyCrypto。
在 Python 中应用此填充方案后,两个加密的 Base64 字符串应该匹配。
关于python - Ruby-OpenSSL、PyCrypto 之间的 AES 加密/解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7021410/