如何在Python中使用M2Crypto封装进行3DES加密?
我有一个可以正常工作的硬件设备测试,它使用RSA加密,代码是用Python和M2Crypto写的。现在我需要测试一个类似的设备,但它使用的是3DES加密。不过,我不知道怎么用M2Crypto来实现三重DES加密。
我知道从这张图表上应该可以做到。但是不幸的是,我找到的M2Crypto的文档很简陋。(主页在http://chandlerproject.org/似乎也不见了,连同Chandler一起消失了。)
我搜索了3DES和“OpenSSL API”,找到了些难以理解的C语言代码用于解密,看起来我需要使用M2Crypto.EVP.Cipher。但我没有找到任何关于如何用它进行DES加密的例子。我找到的最接近的资料是这篇关于用M2Crypto进行AES加密的博客。看起来我只需要搞清楚如何给M2Crypto.EVP.Cipher.__init__()
传递正确的参数。我会继续查找,但觉得有必要把这个问题发出来。
2 个回答
0
下面的代码对我有效:
with open(keyfile, 'rb') as f:
key = f.read()
encrypt = 1
cipher = Cipher(alg='des_ede3_ecb', key=key, op=encrypt, iv='\0'*16)
ciphertext = cipher.update(plaintext)
ciphertext += cipher.final()
请注意,keyfile是一个24字节的二进制文件,有时为了DES加密需要设置奇偶校验。
另外,iv这个参数在使用'des_ede3_ecb'时(我认为)是被忽略的,但我无法传入None
。