我需要实现一个创建受密码保护的ZIP流并保存到的解决方案 数据库作为
团块。还需要从数据库中读取密码保护的内容作为流读取。这个
不应创建物理文件。标准JAVA SDK不支持创建和读取密码
受保护的ZIP。我尝试使用不同的解决方案创建物理文件的最可用解决方案。
我找到了用ZIP4J写/读密码保护ZIP的例子
How to password protect a zipped Excel file in Java?
是否可以使用ZIP4j库创建和读取受密码保护的ZIP,而无需创建物理文件。 ?
将补丁应用于其他可用来源似乎很难满足我的要求。
答案 0 :(得分:1)
如果您打算保护数据库中的BLOB数据,为什么不使用javax.crypto.CipherOutputStream/javax.crypto.CipherInputStream
?
从BLOB读取zip内容并使用ZIP4J将其转换为流非常复杂,您必须首先处理文件头...(检查net.lingala.zip4j.unzip.UnzipEngine
类的源代码)
将zip内容写入内存更容易,下面是一个示例代码:
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