Python的M2Crypto.EVP.Cipher无法处理C++加密数据

0 投票
1 回答
820 浏览
提问于 2025-04-17 06:32

我有一些数据是用C++的OpenSSL通过aes_256_cbc加密的,现在我想在Python中解密这些数据。我原以为用M2Crypto这个OpenSSL的封装库会很简单,但我得到的结果和预期的不一样。

我看过了test_AES的代码,但并没有帮助。我确实能得到一些数据,只是这些数据不对。

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()

在这个时候,按照我所知道的,v应该是我的数据,但实际上并不是……我在StackOverflow上找到另一个问题,提到解密数据的前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()

1 个回答

0

我提到的那个问题说要去掉前面的16个字节,可能是针对不同的实现方式。结果我发现其实应该去掉最后的16个字节。而且你还得确保在把数据转换成二进制格式之后再去掉这16个字节,这样才能确保真的是16个字节

另外,正如Paulo在评论中提到的,AES加密不使用盐值,所以这个参数就用默认的就可以了。

撰写回答