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

标签 python ruby pycrypto

我必须使用 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/

相关文章:

python - 当窗口大小调整时,如何让 Kivy 刷新小部件的大小?

ruby - 为什么 Cucumber 被认为是集成测试工具而不是单元测试工具?

Ruby 元编程 - 如何处理参数错误

Java-Python AES加密解密

python - Google App Engine + PyCrypto =/dev/urandom 不可访问

Python 3 - Pycrypto - 只读固定缓冲区

python - 使用reduce在python中乘以成对元素

python - 在 python 中使用 SVM 进行回归置信度

python - Elasticsearch-Python 2.7-为分析器配置索引

java - 移植库时首先要做的事情