2013-05-14 64 views
1

我正試圖編寫一個需要大量密碼強度僞隨機字節的應用程序。用於Python的快速RC4密碼流?

RC4密碼將是理想的;它在概念上是輕量級且簡單易懂的。所以,我得到了這個規範,並用Python編寫了一個RC4算法。

它的工作原理與預期的完全相同,但它的糖蜜速度很慢。在我的Core i7 2.2GHz上,我只能算出約1MB/sec的算法。

顯然,Python的解釋性質並不是最適合這類任務的。我的問題是我不熟悉C編碼 - 我用C完成的最好的一些是Hello World的東西,還有一些文件讀寫的實驗。無論哪種方式,我當然不能用C來使用Python-C API。

我確實知道.NET/C#,並且我在Windows上用C#編寫了相同的算法,並且我能夠輕鬆地從中獲得超過60MB /秒的性能。因此,.NET的CLR更加優化。但是,Python應用程序的目標平臺是Unix/Linux。

理想情況下,我不想經過大量的中間層才能獲得優化的RC4密碼到Python應用程序中。

由於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語言,但現在對於這個簡單的項目來說,這是一個很大的學習曲線。

+1

你爲什麼不找已經用C語言編寫的RC4加密算法,並從Python中調用它呢? http://www.governmentsecurity.org/forum/topic/28052-rc4-file-encryption-utility/ –

+0

會是一個不錯的主意,除非我不知道足夠的C編寫必要的膠水代碼來包裝RC4的東西在Python模塊中。實際上我知道C足夠寫一個RC4流密碼 - 我寫了一個簡單的從/ dev/urandom中以一定數量的字節自己創建的,然後開始將僞隨機比特吐出到標準輸出。但是我不知道如何用C來包裝它。我需要花更多的時間在C上,然後才能夠做到這一點。 ;-) – fdmillion

回答

7

我相信PyCrypto有一個RC4實施,檢查出來here

+2

請注意,PyCrypto的RC4不會丟棄RC4密鑰流的任何初始字節,這是一個安全弱點。實際上,應該刪除前3000個字節。 – SquareRootOfTwentyThree

+0

我可以通過簡單地抓取3000個字節然後拋出它們來解決這個問題......起初我很困惑,但後來發現ARC4是我在尋找的......謝謝! – fdmillion