Python 的 M2Crypto.EVP.Cipher 不适用于 C++ 加密数据

Posted

技术标签:

【中文标题】Python 的 M2Crypto.EVP.Cipher 不适用于 C++ 加密数据【英文标题】:Python's M2Crypto.EVP.Cipher not working with C++ encrypted data 【发布时间】:2011-11-18 00:08:18 【问题描述】:

我有一些数据是在 C++ 中使用 aes_256_cbc 使用 OpenSSL 加密的,我需要在 Python 中对其进行解密。我认为使用 M2Crypto,作为 OpenSSL 的包装器应该可以让这很容易,但我没有得到相同的数据。

我已阅读 test_AES code 并没有帮助。我正在获取数据,这不是正确的数据。

c = Cipher(alg='aes_256_cbc', key=binaryKey, iv=iv, op=0, d='sha256', i=5, salt=knownSalt, padding=0)
v = c.update(binaryDataToDecrypt)
v += c.final()

此时,afaik, v 应该是我的数据,它不是...我找到了另一个 Q here on SO,其中提到要解密的数据的前 16 个字节是盐,所以我也尝试了没有运气跟随:

c = Cipher(alg='aes_256_cbc', key=binaryKey, iv=iv, op=0, d='sha256', i=5, salt=binaryDataToDecrypt[0:16], padding=0)
v = c.update(binaryDataToDecrypt[16:])
v += c.final()

【问题讨论】:

AES/CBC 中没有盐。虽然它可能是与密码(和散列函数/迭代计数)一起使用来派生密钥......不过,不知道 OpenSSL/M2Crypto。显示用于加密的代码可能会有所帮助。 【参考方案1】:

因此,我链接的那个问题可能是针对不同的实现。事实证明我不得不切掉最后的 16 个字节。您还必须确保在将数据转换为二进制格式后将这 16 个字节切掉,以便它确实是 16 个字节

此外,正如 Paulo 在 cmets 中提到的,AES 不使用盐,因此该参数应保留为默认值。

【讨论】:

以上是关于Python 的 M2Crypto.EVP.Cipher 不适用于 C++ 加密数据的主要内容,如果未能解决你的问题,请参考以下文章

python初识

python基础:python的安装第一个python程序

Python - Python2与Python3的对比转换与兼容

python里面不一样的版本有啥区别?

没安装python的电脑可以运行python写的程序吗

Python代写,Python作业代写,代写Python,代做Python(微信leechanx)