Python的快速RC4密码流?

Python的快速RC4密码流?,python,encryption,rc4-cipher,Python,Encryption,Rc4 Cipher,我正在尝试编写一个需要大量密码强度伪随机字节的应用程序 RC4密码将是这方面的理想选择;它轻量级,概念上易于理解。因此,我得到了规范,并用Python编写了一个RC4算法 它的工作原理和预期完全一样,但速度很慢。在我的核心i7 2.2GHz上,我只能从算法中获得大约1MB/秒的速度 显然,Python的解释性质并不适合这种任务。我的问题是我不太精通C代码——我用C做的最好的事情就是一些Hello World的东西和一些文件读写实验。不管是哪种方式,我肯定没有足够好的C语言来使用Python-CA

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

RC4密码将是这方面的理想选择;它轻量级,概念上易于理解。因此,我得到了规范,并用Python编写了一个RC4算法

它的工作原理和预期完全一样,但速度很慢。在我的核心i7 2.2GHz上,我只能从算法中获得大约1MB/秒的速度

显然,Python的解释性质并不适合这种任务。我的问题是我不太精通C代码——我用C做的最好的事情就是一些Hello World的东西和一些文件读写实验。不管是哪种方式,我肯定没有足够好的C语言来使用Python-CAPI

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

理想情况下,我不想为了在Python应用程序中获得一个优化的RC4密码而需要经过大量的中间层

由于RC4依赖于状态,因此理想情况下,我会使用一个类来实现这一点(这就是我使用纯Python实现的方式)。因此,下面是我希望能够实现的一个小片段:

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语言,但就这个简单的项目而言,这是一个巨大的学习曲线。

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

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

为什么你不找到一个已经用C编写的RC4密码,然后从Python调用它呢?这将是一个好主意,除了我不知道足够的C语言来编写必要的粘合代码,以便将RC4内容封装到Python模块中。事实上,我只知道足够多的C来编写RC4流密码——我编写了一个简单的C流密码,它使用一定数量的字节从/dev/uradom中播种,然后开始向stdout吐出伪随机位。但我不知道如何用C来表达。我需要花更多的时间在C上,然后才能做好这件事。;-)为什么不找到一个已经用C编写的RC4密码,并从Python中调用它呢?这将是一个好主意,除了我不知道足够的C语言来编写必要的粘合代码,以便将RC4内容封装到Python模块中。事实上,我只知道足够多的C来编写RC4流密码——我编写了一个简单的C流密码,它使用一定数量的字节从/dev/uradom中播种,然后开始向stdout吐出伪随机位。但我不知道如何用C来表达。我需要花更多的时间在C上,然后才能做好这件事。;-)请注意,PyCrypto的RC4不会丢弃RC4密钥流的任何初始字节,这是一个安全弱点。实际上,前3000个字节应该被删除。我可以通过简单地抓取3000个字节然后将它们扔掉来解决这个问题。。。起初我很困惑,但后来发现ARC4就是我要找的。。。谢谢请注意,PyCrypto的RC4不会丢弃RC4密钥流的任何初始字节,这是一个安全弱点。实际上,前3000个字节应该被删除。我可以通过简单地抓取3000个字节然后将它们扔掉来解决这个问题。。。起初我很困惑,但后来发现ARC4就是我要找的。。。谢谢