2011-09-12 11 views
0

小さなテキストファイルから数GBのビデオファイルまで、すべてのサイズと種類のファイルを暗号化/復号化しています。 Pycryptoクラスはencode(string)を唯一のエンコーディングメソッドとして持つので、ファイル全体を1つの大きな文字列(Python 2.7バイト/文字列)として渡す必要があります。これは理想的ではないようです。 Pycryptoブロックを分割してどのようにフィードできますか?ファイルを複数のチャンク(サイズが固定のブロック)に分割し、それらのチャンクを同じキーで個別に暗号化すると、暗号ブロック連鎖が妨げられますか? (btw、私は256ビットキーと各ファイルのためのユニークなivとAESを使用しています)大きな文字列ではなくファイルをストリーミングして、Pycryptoで大きなファイルを暗号化する

EDIT:以下の独自の質問に回答しましたが、別のものを提起する:使用する良いチャンクサイズは何ですか?一度に1つのブロックまたは一度に複数のブロック?誰もが、ファイルを読み込みブロックサイズの倍数に埋め込む便利な方法を知っていますか?

+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 

これは私が最も頻繁に使用したメモリブロックサイズです。私はおそらくそれに行くだろう。

関連する問題