Python GnuPG或PyCrypto AES加密

Python GnuPG或PyCrypto AES加密,python,cryptography,aes,pycrypto,gnupg,Python,Cryptography,Aes,Pycrypto,Gnupg,我需要在我的程序中用AES加密一些数据,使用GnuPG(python GnuPG包)或PyCrypto进行加密/解密会更好吗 其中哪一个更安全,afaik GnuPG似乎是一个更成熟、更商业化的解决方案,可以防止在使用加密时出现许多常见的初学者错误(它是否处理初始化向量和AES模式) 我不需要公钥加密,只需要对称加密。Python gnupg是一个高级库,易于使用,并且对使用错误更具鲁棒性。但是,它也不太灵活,只能使用基于PGP的web of trust安全模型的公钥加密。您不能仅使用AES—您

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

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

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

Python gnupg是一个高级库,易于使用,并且对使用错误更具鲁棒性。但是,它也不太灵活,只能使用基于PGP的web of trust安全模型的公钥加密。您不能仅使用AES—您只能使用AES,但AES密钥只能通过类似于PBKDF2的自定义算法从密码中派生。此外,PythonGnuPG是gnupg的包装器,所以您必须考虑到也需要部署这样的本机库

Pycrypto是一个较难使用的低级库;调用API时有很多方法会出错(因此会引入漏洞)。另一方面,它为您定制协议提供了很大的自由。您可以使用公钥和对称密钥加密。该库几乎是自包含的,是的,它处理AES CBC等模式的IVs。例如:

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)

一般来说,pythongnupg更安全,因为滥用其API更困难。不过,如果你真的想要对称加密,我会坚持PyCuto,因为它的功能非常简单,而且依赖性也很小。

我也认为GPG不能做对称加密,我没有考虑使用它来为我的程序使用,但是我发现它可以并且Python GnUPG支持对称加密。因此,我使用PyCrypto或GPG的AES更安全吗?我阅读了您的链接,确实可以只使用对称加密,尽管我认为它很少使用,而且密钥必须始终来自密码。此外,您必须明确表示您想要AES(而不是强制转换)。我根据这个编辑我的答案。