2013-05-14 3 views
1

많은 수의 암호 강도 난수 바이트가 필요한 앱을 작성하려고합니다.파이썬을위한 빠른 RC4 암호 스트림?

RC4 암호가 이상적입니다. 가볍고 개념적으로 이해하기 쉽습니다. 그래서, 스펙을 얻었고 파이썬에서 RC4 알고리즘을 작성했습니다.

정확히 예상대로 작동하지만 당밀로 느립니다. 내 코어 i7 2.2GHz에서 약 1MB/초의 알고리즘 밖에 얻을 수 없습니다.

분명히 파이썬의 해석 된 특성이 이런 종류의 작업에 적합하지 않습니다. 내 문제는 내가 C 코딩에 정통하지 않다는 것이다. C로 해낸 최고는 Hello World와 파일 읽기 및 쓰기 실험이다. 어쨌든, 나는 확실히 Python-C API를 사용하기에 C로는 충분하지가 않다.

.NET/C#을 알고 있고 C#의 Windows에 동일한 알고리즘을 작성 했으므로 쉽게 60MB/초 이상 사용할 수있었습니다. 따라서 .NET의 CLR은 훨씬 더 최적화되었습니다. 그러나 Python 응용 프로그램의 대상 플랫폼은 Unix/Linux입니다.

이상적으로, 저는 최적화 된 RC4 암호를 파이썬 응용 프로그램에 적용하기 위해 중간 계층을 거치지 않아도된다는 것을 이상적으로 생각합니다.

RC4는 상태에 따라 다르므로 클래스를 사용하여이 작업을 수행 할 수 있습니다. (파이썬 전용 구현으로이 작업을 수행 한 방법입니다.) 따라서 여기에 내가 할 수있는 작업에 대한 작은 내용이 있습니다.

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 암호를 발견하지 않습니다을 확인하고, 파이썬에서 호출? http://www.governmentsecurity.org/forum/topic/28052-rc4-file-encryption-utility/ –

+0

RC4 자료를 감싸기 위해 필요한 글루 코드를 작성하기에 충분하지 않은 것을 제외하고는 좋은 아이디어일까요? 파이썬 모듈 내부. 실제로 RC4 스트림 암호를 작성하기에 충분한 C를 알고 있습니다. 특정 바이트 수의/dev/urandom에서 단순히 시드를 작성한 다음 의사 임의 비트를 stdout으로 뱉어 내기 시작합니다. 그러나 나는 C로 그것을 감쌀 수있는 방법을 모른다. 나는 그것을하기에 충분하기 전에 C에서 더 많은 시간을 할애해야 할 것이다. ;-) – fdmillion

답변

7
내가 PyCrypto는 RC4 구현을 가지고 있다고 생각

, here

+2

PyCrypto의 RC4가 보안 취약점 인 RC4 키 스트림의 초기 바이트를 버리지 않는다는 것을 기억하십시오. 실제로는 처음 3000 바이트를 제거해야합니다. – SquareRootOfTwentyThree

+0

간단히 말해서 3000 바이트를 잡아 당겨서 해결할 수 있습니다. 처음에는 혼란 스러웠지만 ARC4는 제가 찾고있는 것입니다 ... 감사합니다! – fdmillion