当前位置: 首页 > 面试题库 >

如何在Python中执行PGP(生成密钥,加密/解密)

樊琦
2023-03-14
问题内容

我正在用Python编写程序,以通过安装程序分发给Windows用户。

该程序需要能够每天下载使用用户公钥加密的文件,然后再解密。

因此,我需要找到一个Python库,该库将允许我生成公共和私有PGP密钥,并解密使用该公共密钥加密的文件。

pyCrypto是否会做这件事(文档模糊)?还有其他纯Python库吗?使用任何语言的独立命令行工具如何?

到目前为止,我所看到的只是GNUPG,但在Windows上进行安装确实会将注册表中的内容填满,并在所有地方抛出dll,然后我不得不担心用户是否已安装了该文件,如何备份其现有的密钥环等。只需使用python库或命令行工具,然后自己管理密钥即可。

更新:pyME可能可以工作,但似乎与我必须使用的Python 2.4不兼容。


问题答案:

您不需要PyCryptoPyMe,尽管这些软件包可能不错-
您将在Windows下构建各种问题。相反,为什么不避开兔子洞,我该怎么做呢?使用gnupg 1.4.9。你不需要做一个完整的安装在最终用户的机器-
刚刚gpg.exeiconv.dll从分配是足够的,你只需要在一些地方有他们在的路径,或使用一个全路径名从你的Python代码访问。无需更改注册表,如果需要,所有内容(可执行文件和数据文件)都可以限制在一个文件夹中。

有一个模块GPG.py最初由Andrew Kuchling编写,由Richard Jones改进,并且由Steve
Traugott进一步改进。它在这里可用,但因为它使用,所以它不适合Windows
os.fork()。尽管它最初是其中的一部分PyCrypto但它完全独立于其他部分,PyCrypto并且只需要gpg.exe /
iconv.dll即可工作

我有一个gnupg.py来自Traugott的版本()GPG.py,该版本使用该subprocess模块。至少出于我的目的,它在Windows下可以正常工作-
我使用它来执行以下操作:

  • 密钥管理-生成,列出,导出等
  • 从外部来源导入密钥(例如,从合作伙伴公司收到的公共密钥)
  • 加密和解密数据
  • 签名并验证签名

我所获得的模块目前尚不理想,因为它包含了一些其他内容,这些内容不应该存在,这意味着我目前无法按原样发布它。在某个时候,也许在接下来的几周内,我希望能够整理一下,添加更多的单元测试(例如,我没有用于签名/验证的任何单元测试)并释放它(在原始PyCrypto许可或类似的商业友好许可)。如果您迫不及待,请使用Traugott的模块并自行对其进行修改-
使其与subprocess模块一起工作并不需要太多工作。

这种方法比其他方法(例如,SWIG基于解决方案或需要使用MinGW/进行构建的解决方案)要痛苦得多MSYS,这是我考虑并尝试过的。我对其他语言编写的系统使用了相同的(gpg.exe/
iconv.dll)方法,例如C#,结果同样轻松。

PS它适用于Python 2.4以及Python 2.5及更高版本。没有经过其他版本的测试,尽管我没有发现任何问题。



 类似资料:
  • 使用Python-GnuPG我想 null 不幸的是,加密返回错误: 但它仍然生成加密ASCII铠甲消息,如果解密结果为对象,则bool值为属性,并包含以下属性: 不确定错误发生的确切位置以及如何处理

  • 问题内容: 我正在使用Java应用程序,该应用程序要求我使用从不同字符串生成的两个密钥进行加密和解密。一个字符串来自用户,另一个是主密钥。我上网查看了有关它的一些参考资料。我真的很想知道如何实现此目标。我将展示我现在拥有的。 因此,从代码中可以看到,我使用了其他stackoverflow帖子中的一些代码,并对其进行了一些修改。我只是不知道如何从2个字符串生成2个密钥,以及从哪里可以获取用于解密的S

  • 我正在开发一个Java应用程序,它要求我使用从不同字符串生成的两个密钥进行加密和解密。一个字符串来自用户,另一个是主密钥。我在网上查了一下,找到了一些关于它的参考资料。我真的很想得到一些帮助,了解如何实现这一点。我将展示我现在所拥有的。 正如您从代码中看到的,我使用了其他stackoverflow帖子中的一些代码,并对其进行了一些修改。我只是不知道如何从2个字符串生成2个密钥,以及从哪里可以获得用

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id

  • 对于PGP想要使用的签名和加密密钥,我是否可以使用2个JCE、RSA或DSA keypairs?把它们保存在密钥库中,当我想使用这些密钥时,只需按需重建PGP基础结构?

  • 如果我尝试使用OpenSSL命令行生成3TDES加密的PKCS 8密钥: 我得到: PKCS8 RFC没有说明必须使用哪种算法来创建密钥块。它确实给出了PKCS5算法作为例子。有没有办法使用OpenSSL创建一个由DES密钥加密的PKCS8密钥?如果不是,它是OpenSSL不支持的还是一个非常不标准的事情? 下面是通过OpenSSL命令行(密码测试)使用基于密码的加密创建的示例: 这里是我手工制作