2011-09-12 2 views
0

작은 텍스트 파일에서 몇 GB의 비디오 파일까지 모든 크기와 종류의 파일을 암호화/해독합니다. Pycrypto 클래스는 단지 인코딩 방법으로 encode (string)을 사용합니다. 전체 파일을 하나의 큰 문자열 (Python 2.7 바이트/문자열)로 전달해야 함을 암시합니다. 이것은 이상적인 것 같지 않습니다. Pycrypto 블록을 단편적인 방법으로 먹일 수 있습니까? 파일을 청크 (각각 고정 된 크기의 블록)로 분할하고 동일한 청크를 개별적으로 암호화하는 경우 암호화 블록 결합을 방해합니까? (btw, 256 비트 키를 가진 AES와 각 파일마다 고유 한 iv를 사용하고 있습니다.)큰 문자열이 아닌 파일을 스트리밍하여 Pycrypto로 대용량 파일 암호화

EDIT : 아래의 자신 만의 질문에 답변 : 그러나 다른 것이 발생합니다. 사용할 좋은 청크 크기는 무엇입니까? 한 번에 한 블록 씩 또는 한 번에 여러 블록? 그리고 누구든지 파일을 읽지 만 블록 크기의 배수로 채우는 편리한 방법을 알고 있습니까?

+0

[m2crypto] (http://sandbox.rulemaker.net/ngps/m2/) 모듈이 블록 암호를 더 잘 지원할 수 있다고 생각합니다. – larsks

+0

암호문을 보내는 동안 CBC를 계속 사용할 수 있어야합니다. – NullUserException

답변

5

OK, 대만족, 빠른 실험 :

>>> obj = AES.new('blablablablablab', AES.MODE_CBC, 'a' * 16) 
>>> obj.encrypt('z' * 16) 
"?R\xd9/\xc2\xcb\x98\x8cL\xd4\xe3M\r'-k" 
>>> obj.encrypt('z' * 16) 
'\xa0QL\x92\xcb\xac{y\xceG\xce\xe2\x05t\xe8\xc3' 
>>> obj.encrypt('z' * 16) 
'\xc4x\x87L\x025\xbc\xe6\xf1`\x16w\xe0\x94$\x17' 
>>> 

같은 입력, 다른 결과. 따라서 생성하는 각 암호 개체는 IV 상태를 유지해야합니다. 동일한 암호 개체로 인코딩 할 각 호출은 메시지의 다음 덩어리를위한 것입니다.

0
4096 

가장 자주 사용되는 메모리 블록 크기입니다. 아마 그걸로 갈거야.