16

我正在用 python 3 编写一个程序,它需要加密功能(至少 aes 和 rsa)。我发现PyCrypto似乎只适用于 2.x 版本。

是否有任何可用于 python 3 的好工具,或者我应该开始翻译我的程序以与 python 2(或任何其他解决方案)兼容?

谢谢


如下所述更新,PyCrypto 现在可在 py3k 上使用

4

9 回答 9

17

PyCrypto 2.4.1 和更高版本现在可以在 Python 3.x 上运行(参见changelog diff)。

于 2011-12-04T06:00:42.087 回答
5

尽管 Python 3 本身已经为黄金时段做好了准备,但缺乏支持它的库是一个障碍。你能做的最好的当然是帮助将 PyCrypto 移植到 Python 3,尽管我认为它有很多 C 扩展模块,这些模块可能并不完全是微不足道的,而且需要几天的工作时间。也许当前的维护者有兴趣移植或已经完成了一半,你应该联系他并询问。

有一个用 Python 编写的 rsa 模块,它看起来有相当干净且易于移植的代码,但对于 aes 来说,PyCrypto 似乎是要使用的模块。因此,让您的软件在 Python 2 下运行可能更容易。

于 2011-01-03T09:33:10.673 回答
5

Crytographic Libraries 主要是数字计算,我不知道为什么 py3k 版本还不可用。

  1. 这是可用于 Python 3的pyDES 。
  2. 这是Python 3 中的AES 算法实现。从这个py2k 版本移植
  3. 这是Python 3 中的RSA 算法实现。我从这个py2k 版本移植了它。

请谨慎使用它们,因为它们只是按照算法文本实现的开发程序。(也就是说,我不确定原始python2版本的严谨性)。此外,它们都是纯 python 库,它们比使用 C 扩展编写的任何东西都要慢(也许这就是 py3k 版本延迟的原因)。

于 2011-01-03T10:07:50.243 回答
4

我编写了一个包装库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 页面上提供了更多信息。

于 2013-02-02T13:50:57.020 回答
3

Cryptography( documentation) 声称解决PyCrypto,M2Crypto和的多个缺点PyOpenSSL。他们没有提到simple-crypt,但该项目的主要目标是提供高级、安全、易于使用的界面以及一组较低级别的界面(可从“hazmat”模块获得),允许更细粒度的控制了解陷阱的开发人员。

由于没有使用其他库,我无法评论密码学是否比其他库更好,但到目前为止它肯定满足了我的需求。

于 2016-03-25T20:33:10.390 回答
2

我不知道任何合理的 python 加密库(无论版本如何)。我所知道的一切(包括 pycrypto)都只是一个玩具。如果你想实现一个严肃的应用程序,那么你应该寻找一个真正的库的包装器,比如 m2crypto。Pycrypto 本身确实遵循许多标准。特别是,RSA 需要一个好的填充方案来保证安全。由于 pycrypto 目前至少没有使用填充,这使得它的 RSA 实现既不安全又与其他加密库不兼容。

回答马丁斯的问题:显然这个问题有很多意见。一种建议是使用 Java 而不是 python。Java 有一个定义良好的加密接口,并且有不同的提供者来实现这个接口。这具有相当大的优势,即可以实现独立于提供者的解决方案,因此可以轻松地在不同的提供者之间切换。我个人喜欢 openssl,但我知道它很难使用。

于 2011-01-04T08:43:51.977 回答
2

这是来自约翰霍普金斯大学的用于密码学研究的 Python3库。它支持椭圆曲线操作和基于配对的加密。

于 2011-08-09T15:23:51.010 回答
2

我的 LibTomCrypt 周围的 Python 包装器现在支持 Python 3,它同时具有 AES 和 RSA。

见:https ://github.com/mikeboers/PyTomCrypt#readme

于 2011-12-03T02:50:37.930 回答
1

pycrypto 有 Py3k 分支(在https://github.com/dlitz/pycrypto/tree/py3k

于 2011-09-08T10:44:31.970 回答