2011-09-15 87 views
1

我有一個問題,如何加密zip類型的壓縮blob。由於某些原因,我無法使用chilkat模塊,因此zipfile模塊僅提供解密功能,所以我不知道如何使用密鑰對zip文件進行加密。如何加密應用程序引擎blobstore上的zip文件

您能否給我一些建議如何解決這個問題?

理想的解決方案將是這個樣子:

所有的
blob_info = blobstore.BlobInfo.all()[0] #lets say we want to read the first blob we find 
blob_reader = blobstore.BlobReader(blob_info.key()) 

file = zipfile.ZipFile(blob_reader, 'r') 
data = file.read(file.namelist()[0]) 

output = StringIO.StringIO() 
outfile = zipfile.ZipFile(output, "w") 

outfile.writestr(file.namelist()[0], data) 
outfile.setpassword('testpass') #it would be nice if there was a module that could set pass like this, .setpassword() only works with decryption 

outfile.close() 

outputStream = files.blobstore.create(mime_type='application/zip', _blobinfo_uploaded_filename = file.namelist()[0].split('.')[0] + '.zip') 
with files.open(outputStream, 'a') as f: 
    f.write(output.getvalue()) 
files.finalize(outputStream) 

回答

1

首先,請允許我說的zip加密薄弱和過時。如果你需要強大的安全性,你不應該依賴它。這已在許多論文中得到證實(Google表示,最流行的是Eli Biham和Paul C. Kocher的「已知明文攻擊PKZIP流密碼」)。

其次,GAE只適用於純Python的庫。可能你不能使用chilkat,因爲它是一個C庫。

第三,在純Python的zip文件加密/解密將是緩慢的地獄,並且可能是你有GAE CPU的問題......

也許你應該考慮另一種方式來做到這一點?

Regards

+0

贊同你的第一點。關於奇爾卡特是另一回事......但我不知道這需要很多時間。 另一個選擇是分別加密每個文件,但事情是我不能確定用戶會給我在zip中相同的文件類型。 謝謝你的幫助 – Peter

+0

@Peter:壓縮加密文件可能沒有多大用處,因爲文件壓縮不好。將所有文件壓縮成單個Zip文件,然後單獨加密,會更好。 – rossum

+0

@彼得也許如果你告訴我們你想達到的目標,我們可以提出一種方法。 –

相關問題