2011-09-12 17 views
0

我正在加密/解密所有大小和種類的文件,從小文本文件到幾GB的視頻文件。 Pycrypto類只是編碼(字符串)作爲唯一的編碼方法,這意味着我必須將整個文件作爲一個大字符串傳遞(Python 2.7字節/字符串,即)。這似乎並不理想。我該如何餵食Pycrypto塊零碎?如果我將文件拆分成塊(每個塊都有固定數量的塊)並用相同的密鑰對這些塊進行單獨加密,會不會影響密碼塊鏈接? (順便說一下,我使用256位密鑰AES和每個文件獨特的iv)。使用Pycrypto通過流式傳輸文件而不是一個大字符串加密大文件

編輯:回答自己的問題下面,但是引發另一個:什麼是一個好的塊大小使用?一次或多次一個街區?任何人都知道一種方便的方法來讀取文件,但將其填充到塊大小的倍數?

+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 

這只是我見過的最常用的內存塊大小。我可能會這樣做。

相關問題