5

我需要实现一个解决方案来创建受密码保护的 ZIP 流并将其保存到数据库中

斑点。还需要从数据库中读取密码保护的内容作为流读取。这个

不应创建物理文件。标准 JAVA SDK 不支持创建和读取密码

受保护的邮编。我尝试了不同的解决方案,所有可用的解决方案都创建了物理文件。

我找到了使用 ZIP4J 编写/读取密码保护 ZIP 的示例

如何在 Java 中对压缩的 Excel 文件进行密码保护?

是否可以在不创建物理文件的情况下使用 ZIP4j 库创建和读取受密码保护的 ZIP。?

将补丁应用于其他可用源似乎很难满足我的要求。

用 Java 编写受密码保护的 Zip 文件

4

1 回答 1

3

如果您的目的是保护数据库中的 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
于 2016-02-08T05:45:51.150 回答