1

我需要在我的程序中使用 AES 加密一些数据,使用 GnuPG(python-gnupg 包)或 PyCrypto 进行加密/解密会更好吗?

其中哪一个更安全,afaik GnuPG 似乎是一个更成熟且经过商业验证的解决方案,可以防止在使用加密时出现许多常见的初学者错误(它是否处理初始化向量和 AES 模式)?

我不需要公钥加密,只需要对称加密。

4

1 回答 1

3

Python-gnupg是一个高级库,易于使用且对使用错误更健壮。但是,它也不太灵活,您只能使用基于 PGP 信任网络安全模型的公钥加密。您不能只使用 AES您只能使用 AES,但 AES 密钥只能通过自定义的类似 PBKDF2 的算法从密码中派生。此外,python-gnupg是 gnupg 的包装器,因此您必须考虑到还需要部署这样的本机库。

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-gnupg更安全,因为它更难以滥用其 API。不过,如果你真的只想要对称加密,我会坚持使用pycrypto,因为它的功能非常简单并且依赖项更少。

于 2013-09-08T09:08:10.973 回答