【问题标题】:Fast RC4 cipher stream for Python?Python 的快速 RC4 密码流?
【发布时间】:2013-05-14 21:37:10
【问题描述】:

我正在尝试编写一个需要大量加密强度伪随机字节的应用。

RC4 密码将是理想的选择;从概念上讲,它轻巧且易于理解。所以,我得到了规范,并用 Python 编写了一个 RC4 算法。

它的工作原理完全符合预期,但是它像糖蜜一样缓慢。在我的 Core i7 2.2GHz 上,我只能从算法中获得大约 1MB/秒。

很明显,Python 的解释性质并不是最适合这类任务。我的问题是我不精通 C 编码——我用 C 做的最好的事情是一些 Hello World 的东西和一些文件读写的实验。不管怎样,我对 C 语言肯定不够好,无法使用 Python-C API。

我确实了解 .NET/C#,并且我在 C# 上的 Windows 中编写了相同的算法,并且我能够轻松地从中获得超过 60MB/秒的速度。所以.NET 的 CLR 被优化了很多。但是,Python 应用程序的目标平台是 Unix/Linux。

理想情况下,我不想为了将优化的 RC4 密码放入 Python 应用程序而经历大量中间层。

由于 RC4 依赖于状态,理想情况下我会使用一个类来执行此操作(这就是我使用纯 Python 实现的方式。)所以,这是我希望能够做的一个小 sn-p:

rc4 = RC4Encrypter()
rc4.seed(myKey) # seed the RC4 algorithm with bytes from string myKey
rc4.getRC4Bytes(1048576) # get the next 1MB of RC4 cryptostream bytes as a binary string
rc4.encryptWithRC4(myString) # encrypt myString's bytes with RC4 bytes using xor and return

有什么建议吗?我很想学习 C,但对于这个简单的项目来说,现在它是一个很大的学习曲线。

【问题讨论】:

  • 你为什么不找到已经用 C 语言编写的 RC4 密码,然后从 Python 中调用它呢? governmentsecurity.org/forum/topic/…
  • 会是一个好主意,除了我不知道足够的 C 来编写必要的胶水代码来将 RC4 内容包装在 Python 模块中。实际上,我确实知道足够的 C 来编写一个 RC4 流密码 - 我写了一个简单地从 /dev/urandom 中播种一定数量的字节然后开始向标准输出吐出伪随机位的密码。但我不知道如何将它包装在 C 中。我需要花更多的时间在 C 上,然后才能做到这一点。 ;-)

标签: python encryption rc4-cipher


【解决方案1】:

我相信 PyCrypto 有一个 RC4 实现,看看here

【讨论】:

  • 请注意,PyCrypto 的 RC4 不会丢弃 RC4 密钥流的任何初始字节,这是一个安全漏洞。实际上,应该删除前 3000 个字节。
  • 我可以通过简单地抓取 3000 个字节然后将它们扔掉来解决这个问题...起初我很困惑,但后来发现 ARC4 是我正在寻找的...谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多