如何使用 M2Crypto 包装器在 Python 中进行 3DES 加密?

发布于 2024-09-15 15:45:49 字数 873 浏览 8 评论 0原文

我对使用 RSA 加密的硬件设备进行了工作测试,在 Python 中使用 M2Crypto。现在我需要测试一个使用 3DES 加密的类似设备。但我不知道如何使用 M2Crypto 进行三重 DES 加密。

我知道从这张图表中应该可以实现。但不幸的是,我发现M2Crypto 文档很粗略。 (主页位于http://chandlerproject.org/ 似乎和 Chandler 一起消失了。)

我搜索了 3DES 和“OpenSSL API”,发现了一些难以理解的用于解密的 C 代码,这使得它看起来就像我需要使用 M2Crypto.EVP.Cipher 一样。但我还没有找到任何将其用于 DES 的示例。我发现的最接近的是 这篇关于将其用于 AES 的博客文章加密。看来我只需要找出 M2Crypto.EVP.Cipher.__init__() 的正确参数。我会继续挖掘,但我认为值得发布这个问题。

I have a working test of a hardware device that uses RSA encryption, in Python using M2Crypto. Now I need to test a similar device that uses 3DES encryption. But I can't figure out how to use M2Crypto to do triple DES encryption.

I know it should be possible from this chart. But unfortunately the documentation of M2Crypto I've found is sketchy. (The homepage at http://chandlerproject.org/ seems to be gone, along with Chandler.)

I've searched for 3DES and "OpenSSL API" and found some hard to grok C code for decrypting which makes it look like I need to use M2Crypto.EVP.Cipher. But I haven't found any examples of using it for DES. The closest I've found is this blog post on using it for AES encryption. It looks like I just need to figure out the correct arguments to M2Crypto.EVP.Cipher.__init__(). I'll keep digging, but I thought it worth posting this question.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷月断魂刀 2024-09-22 15:45:49

请参阅此处。有以下 DES 密码的参考:'des_ede_ecb'、'des_ede_cbc'、'des_ede_cfb'、'des_ede_ofb'、'des_ede3_ecb'、'des_ede3_cbc'、'des_ede3_cfb'、'des_ede3_ofb'。

现在主页似乎在这里

See here. There is reference for the following DES ciphers : 'des_ede_ecb', 'des_ede_cbc', 'des_ede_cfb', 'des_ede_ofb', 'des_ede3_ecb', 'des_ede3_cbc', 'des_ede3_cfb', 'des_ede3_ofb'.

The homepage seems to be here now.

仙气飘飘 2024-09-22 15:45:49

以下代码对我有用:

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

请注意,密钥文件是一个 24 字节(二进制)文件,其奇偶校验设置为 DES 有时所需的。

另请注意,使用“des_ede3_ecb”时,iv 参数(我相信)会被忽略,但我无法传递 None。)

The following code worked for me:

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

Note the keyfile is a 24-byte (binary) file with parity set as sometimes required for DES.

Note also that the iv argument is (I believe) ignored when using 'des_ede3_ecb', but I couldn't pass None.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文