推荐的Python加密模块?

hew*_*own 31 python cryptography

我一直在探索Python可用的加密模块,我发现3:ezPyCrypt,yawPyCrypt和KeyCzar(它实际上支持几种语言,但Python包含在其中).前两个依赖于PyCrypto模块.

我缺少选择吗?是否有一个明确的领跑者的轻松和功能,还是只是降低到一个舒适的方式?

我目前倾向于KeyCzar,ezPyCrypt紧随其后.

我将使用该库进行数字签名签名和验证,并可能用于密钥创建(尽管如果我必须为此功能调用其他内容,我不会哭).

我正在使用Python 3.x并可以访问GPG.

Ayr*_*yrx 21

一个新的Python加密库已经快速发展了几个月了.0.2.1版本刚刚发布了几天前.

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

它主要是围绕现有C库(如OpenSSL)的CFFI包装器.它作为纯python模块发布,支持CPython版本2.6 - 3.3以及PyPy.它也是重构的pyOpenSSL包的上游.

它的目的是揭示高级"配方",使密码学尽可能具有愚蠢性,以及只应谨慎使用的原语.对称算法(包括AES-GCM)得到了很好的支持,RSA和DSA等非对称算法应该会在接下来的几个版本中出现.支持的其他值得注意的算法包括PBKDF2,HKDF,HOTP和TOTP.

  • 现在已经过去了几年,这个图书馆已经变得更加成熟。据我所知,它基本上成功地成为了*事实上*的密码学标准 Python 库。 (2认同)

Vin*_*jip 13

如果你是其中包含的GnuPG和Python> = 2.4的环境中,那么你也可以考虑一个工具,如蟒蛇,GnuPG的.(免责声明:我是这个项目的维护者.)它将繁重的工作留给了gpg并提供了一个相当简单的API.

API概述:

>>> 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' 


Squ*_*ree 9

另一个需要考虑的加密库是PyCryptodome,它是PyCrypto的一个支持PyPy和一些原语(SHA-3,Salsa20,scrypt等).


Ale*_*lli 8

pycrypt实际上是一个简单的AES加密/解密模块,构建在pycrypto之上,就像你提到的其他模块一样 - 注意后者正在转换到pycrypto.org URL,因为它正在改变维护者,稳定的版本和文档仍然是原作者的网站.除了你提到的更容易使用的包装器之外,pycrypto的一个优点是它的纯python 子集是由Google的App Engine提供的,所以如果你想在那里部署任何代码,那么熟悉它会很有用.

主要的替代方案(另一个强大而复杂的项目,如pycrypto)是pyopenssl,这是一个相当规则的包装(一个"薄包装",如作者所描述的)OpenSSL(如果你习惯于编码,这可能是一个加号在C中调用OpenSSL).egenix分发了一个完整的替代包装(附带所需的库),并且可能在法律上更安全(不包括存在专利纠纷或疑问的部分).

两个主要项目(pycrypto和pyopenssl)经历了或多或少的不活动,因为原始作者继续其他事情,但两者都积极开发和维护,这始终是一个好兆头.

我不知道在pyopenssl之上易于使用的包装器(很可能是,但它们没有像pycrypto那样被公开)所以,如果看起来你似乎关心易用性和不想自己写包装,pycrypto之上的包装似乎是更好的选择.