我需要在我的程序中用AES加密一些数据,使用GnuPG(python-gnupg包)或PyCrypto进行加密/解密会更好吗?
以下哪个更安全,afaik GnuPG 似乎是一个更成熟且经过商业验证的解决方案,可以在使用加密时防止许多常见的初学者错误(它是否处理初始向量和 AES 模式)?
我不需要公钥加密,只需要对称加密。
Python-gnugg是一个高级库,易于使用,并且对使用错误更健壮。但是,它也不太灵活,您只能使用基于PGP信任网络安全模型的公钥加密。您不能只使用 AES您只能使用 AES,但 AES 密钥只能通过类似 PBKDF2 的自定义算法从密码派生。此外,python-gnugg是gnugg的包装器,所以你必须考虑到也需要部署这样的原生库。
Pycrypto是一个更难使用的低级库;在调用API时有很多方法可以犯错误(因此引入漏洞)。另一方面,它为您提供了很大的自由来定制您的协议。可以同时使用公钥加密和对称密钥加密。该库几乎是独立的,是的,它处理 AES CBC 等模式的 IV。例如:
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES
iv = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(plaintext)
一般来说,python-gnugg更安全,因为滥用其API更困难。不过,如果你真的只想要对称加密,我会坚持使用 pycrypto,因为它的功能非常简单,而且依赖关系更少。