PyCrypto 是否安全可靠?

13 投票
3 回答
5583 浏览
提问于 2025-04-17 04:41

我打算在一个项目中使用PyCrypto这个库,我想知道它是否安全可靠,值得使用。那我该怎么确保PyCrypto能够按照不同的加密算法,比如RSA和AES,正确地加密数据呢?

3 个回答

4

请注意,我也不是加密方面的专家。不过,我快速浏览了一下GitHub上的PyCrypto代码和他们的邮件列表。有一点让我感到放心的是,代码库中有很多专业人士的贡献。开发者们会承认安全性问题,并努力去修复这些问题。

如果你有一个需要安全实现的具体使用场景,可以看看他们的代码,并在他们的邮件列表上提问。因为他们在很多情况下似乎利用了C/C++的库来完成工作,所以你可以直接查看这些基础库的信誉。

5

不行。PyCrypto 这个库已经不再积极更新了,建议使用加密库(cryptography library)来代替。

来源:https://github.com/dlitz/pycrypto/issues/173

19

这要看情况。

PyCrypto的某些部分确实很好。例如,Crypto.Random这个功能(在PyCrypto 2.1中引入)设计得相当简单易用,底层使用的算法(Fortuna)也是为了让人容易理解和使用。

但其他部分只是一些低级加密基础功能的实现,所以它能工作,但你得知道怎么正确使用它们。比如,Crypto.PublicKey.RSA并没有实现完整的RSA PKCS#1标准(这就是大家提到“RSA”时通常想到的东西)。它只实现了基本的RSA功能(m^e mod n和c^d mod n),你还得自己提供PKCS#1的实现。

确保PyCrypto正确加密你的数据的最好方法(不看源代码的话,我建议大家都去看看)是使用一个标准的协议和/或消息格式,并测试你的代码是否能和其他实现正常工作。如果你自己定义消息格式(其实你可能不应该这么做),那么你需要非常小心,确保PyCrypto确实在按照你想的方式工作。

声明:我是现在的PyCrypto维护者,所以我的观点不应该被视为独立的评测。

更新:PyCrypto 2.5及以后的版本现在包含了正确的RSA PKCS#1加密和签名实现。有关详细信息,请查看Crypto.Cipher.PKCS1_OAEP和Crypto.Signature.PKCS1_PSS的API文档。

撰写回答