推荐的Python加密模块?
我最近在研究Python可以用的加密模块,发现了三个:ezPyCrypt、yawPyCrypt和KeyCzar(其实它支持几种语言,但Python也在其中)。前两个模块依赖于PyCrypto。
我是不是漏掉了其他选择?有没有哪个模块在易用性和功能上更突出,还是说这主要取决于个人的使用习惯呢?
我现在比较倾向于使用KeyCzar,ezPyCrypt也不错。
我打算用这个库来进行数字签名的签署和验证,可能还会用来创建密钥(不过如果需要用其他工具来实现这个功能,我也不会太在意)。
我使用的是Python 3.x,并且可以使用GPG。
8 个回答
另一个值得考虑的加密库是 PyCryptodome,它是PyCrypto的一个分支,支持PyPy,并且增加了一些新的功能,比如SHA-3、Salsa20、scrypt等等。
最近,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。
如果你在一个包含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'