我正在用 python 3 编写一个程序,它需要加密功能(至少 aes 和 rsa)。我发现PyCrypto似乎只适用于 2.x 版本。
是否有任何可用于 python 3 的好工具,或者我应该开始翻译我的程序以与 python 2(或任何其他解决方案)兼容?
谢谢
如下所述更新,PyCrypto 现在可在 py3k 上使用
我正在用 python 3 编写一个程序,它需要加密功能(至少 aes 和 rsa)。我发现PyCrypto似乎只适用于 2.x 版本。
是否有任何可用于 python 3 的好工具,或者我应该开始翻译我的程序以与 python 2(或任何其他解决方案)兼容?
谢谢
如下所述更新,PyCrypto 现在可在 py3k 上使用
PyCrypto 2.4.1 和更高版本现在可以在 Python 3.x 上运行(参见changelog diff)。
尽管 Python 3 本身已经为黄金时段做好了准备,但缺乏支持它的库是一个障碍。你能做的最好的当然是帮助将 PyCrypto 移植到 Python 3,尽管我认为它有很多 C 扩展模块,这些模块可能并不完全是微不足道的,而且需要几天的工作时间。也许当前的维护者有兴趣移植或已经完成了一半,你应该联系他并询问。
有一个用 Python 编写的 rsa 模块,它看起来有相当干净且易于移植的代码,但对于 aes 来说,PyCrypto 似乎是要使用的模块。因此,让您的软件在 Python 2 下运行可能更容易。
我编写了一个包装库simple-crypt,它在 python 3 中提供加密和解密,将工作委托给 pycrypto。
直接使用它而不是 pycrypto 的优点包括:
更简单的界面:
data = encrypt(password, text)
text = decrypt(password, data).decode('utf8')
密钥扩展以使密码的使用更安全
使用 hmac 检查数据的修改
一个版本化的标头,一旦转移到 python 3,我应该可以将实现切换到谷歌的 keyczar(因为应该更好地维护 - 我只是出于明显的需要才写这个)。
您可以使用以下方法安装软件包:
easy_install simple_crypt
该项目的github 页面上提供了更多信息。
Cryptography
( documentation
) 声称解决PyCrypto
,M2Crypto
和的多个缺点PyOpenSSL
。他们没有提到simple-crypt
,但该项目的主要目标是提供高级、安全、易于使用的界面以及一组较低级别的界面(可从“hazmat”模块获得),允许更细粒度的控制了解陷阱的开发人员。
由于没有使用其他库,我无法评论密码学是否比其他库更好,但到目前为止它肯定满足了我的需求。
我不知道任何合理的 python 加密库(无论版本如何)。我所知道的一切(包括 pycrypto)都只是一个玩具。如果你想实现一个严肃的应用程序,那么你应该寻找一个真正的库的包装器,比如 m2crypto。Pycrypto 本身确实遵循许多标准。特别是,RSA 需要一个好的填充方案来保证安全。由于 pycrypto 目前至少没有使用填充,这使得它的 RSA 实现既不安全又与其他加密库不兼容。
回答马丁斯的问题:显然这个问题有很多意见。一种建议是使用 Java 而不是 python。Java 有一个定义良好的加密接口,并且有不同的提供者来实现这个接口。这具有相当大的优势,即可以实现独立于提供者的解决方案,因此可以轻松地在不同的提供者之间切换。我个人喜欢 openssl,但我知道它很难使用。
我的 LibTomCrypt 周围的 Python 包装器现在支持 Python 3,它同时具有 AES 和 RSA。
pycrypto 有 Py3k 分支(在https://github.com/dlitz/pycrypto/tree/py3k)