2014-07-20 82 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 
相关问题