推荐的Python加密模块?

34 投票
8 回答
32504 浏览
提问于 2025-04-15 12:57

我最近在研究Python可以用的加密模块,发现了三个:ezPyCrypt、yawPyCrypt和KeyCzar(其实它支持几种语言,但Python也在其中)。前两个模块依赖于PyCrypto。

我是不是漏掉了其他选择?有没有哪个模块在易用性和功能上更突出,还是说这主要取决于个人的使用习惯呢?

我现在比较倾向于使用KeyCzar,ezPyCrypt也不错。

我打算用这个库来进行数字签名的签署和验证,可能还会用来创建密钥(不过如果需要用其他工具来实现这个功能,我也不会太在意)。

我使用的是Python 3.x,并且可以使用GPG。

8 个回答

10

另一个值得考虑的加密库是 PyCryptodome,它是PyCrypto的一个分支,支持PyPy,并且增加了一些新的功能,比如SHA-3、Salsa20、scrypt等等。

25

最近,Python有一个新的加密库正在快速开发中,刚刚发布了0.2.1版本。

https://cryptography.io/en/latest/

这个库主要是一个CFFI的包装器,围绕着现有的C语言库,比如OpenSSL。它作为一个纯Python模块发布,支持CPython的2.6到3.3版本,还有PyPy。它也是重构后的pyOpenSSL包的上游。

这个库的目标是提供一些高层次的“食谱”,让加密变得尽可能简单易用,同时也提供一些基础功能,但使用这些功能时需要小心。对对称算法(比如AES-GCM)的支持非常好,而非对称算法像RSA和DSA预计会在接下来的几个版本中推出。其他一些值得注意的支持算法包括PBKDF2、HKDF、HOTP和TOTP。

12

如果你在一个包含GnuPG和Python版本大于等于2.4的环境中,那么你可以考虑使用一个叫做 python-gnupg 的工具。(免责声明:我是这个项目的维护者。)这个工具把复杂的工作交给 gpg 来处理,并提供了一个相对简单的接口。

接口概述:

>>> import gnupg
>>> gpg = gnupg.GPG(gnupghome='/path/to/keyring/directory')
>>> gpg.list_keys()

[{
  ...
  'fingerprint': 'F819EE7705497D73E3CCEE65197D5DAC68F1AAB2',
  'keyid': '197D5DAC68F1AAB2',
  'length': '1024',
  'type': 'pub',
  'uids': ['', 'Gary Gross (A test user) ']},
 {
  ...
  'fingerprint': '37F24DD4B918CC264D4F31D60C5FEFA7A921FC4A',
  'keyid': '0C5FEFA7A921FC4A',
  'length': '1024',
  ...
  'uids': ['', 'Danny Davis (A test user) ']}]
>>> encrypted = gpg.encrypt("Hello, world!", ['0C5FEFA7A921FC4A'])
>>> str(encrypted)

'-----BEGIN PGP MESSAGE-----\nVersion: GnuPG v1.4.9 (GNU/Linux)\n
\nhQIOA/6NHMDTXUwcEAf
...
-----END PGP MESSAGE-----\n'
>>> decrypted = gpg.decrypt(str(encrypted), passphrase='secret')
>>> str(decrypted)
'Hello, world!'
>>> signed = gpg.sign("Goodbye, world!", passphrase='secret')
>>> verified = verified = gpg.verify(str(signed))
>>> print "Verified" if verified else "Not verified"

'Verified' 

撰写回答