2014-07-20 97 views
2

我需要實現創建密碼保護的ZIP流的解決方案,並 數據庫保存爲創建和讀取密碼使用流保護的ZIP。(不是物理文件)

斑點。還需要讀取數據庫讀取的密碼保護內容作爲流。這

不應該創建一個物理文件。標準JAVA SDK不支持創建和讀取密碼

受保護的ZIP。我嘗試使用不同的解決方案創建物理文件的所有可用解決方案。

我發現的例子與寫入/讀取密碼保護ZIP與ZIP4J

How to password protect a zipped Excel file in Java?

是否可以創建和讀取與ZIP4j庫密碼保護的ZIP探頭,而無需創建物理文件。 ?

將修補程序應用於其他可用來源似乎很難滿足我的要求。

Write a password protected Zip file in Java

+0

我認爲你需要的大部分片段都在java.util.zip中。 –

+0

沒有。 java.util.zip不能密碼保護一個zip – user3693532

+0

但是你可以單獨進行加密/解密。 –

回答

1

如果你的意圖是保護數據庫中的BLOB數據,你爲什麼不只是使用javax.crypto.CipherOutputStream/javax.crypto.CipherInputStream

閱讀從BLOB壓縮內容,並將其轉換使用ZIP4J是相當複雜的流式傳輸,您必須在文件頭工作第一...(查看net.lingala.zip4j.unzip.UnzipEngine類的源代碼)

寫作拉鍊內容到內存更容易,這裏是一個示例代碼:

ZipParameters zipParam = new ZipParameters(); 
zipParam.setSourceExternalStream(true); 
//set parameter for encryption... 
zipParam.setEncryptFiles(true); 
zipParam.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); 
zipParam.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); 
zipParam.setPassword("test123"); 

ByteArrayOutputStream bo = new ByteArrayOutputStream(256); 
ZipOutputStream zout = new ZipOutputStream(bo, new ZipModel()); 

String[] filenames = new String[]{"1.txt"}; 
for (int i = 0; i < filenames.length; i++) { 
    zipParam.setFileNameInZip(filenames[0]); 
    zout.putNextEntry(null, zipParam); 
    zout.write(filenames[0].getBytes());//data waiting for compressed... 
    zout.closeEntry(); 
} 
zout.finish(); 
zout.close(); 

bo.toByteArray();//compressed data of zip file 
相關問題