You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现Zip文件整体密码保护问题求助(基于zip4j)

解决新版Zip4j实现Zip文件整体加密(含目录加密)的问题

你当前的代码只加密了Zip内部文件的内容,但没加密Zip的目录结构,导致无需密码就能打开Zip查看文件列表甚至删除文件。新版Zip4j(2.x及以上)调整了API,旧版的net.lingala.zip4j.util.Zip4jConstants和net.lingala.zip4j.core.ZipFile确实已被移除,改用新的顶层ZipFile类和枚举类。

要实现整体加密(无密码无法访问Zip内任何内容,包括目录),只需在ZipParameters中添加一行配置:zipParameters.setEncryptFileName(true);,这会同时加密文件名/目录结构和文件内容。

修改后的完整代码如下:

try (ZipFile zipFile = new ZipFile("settings.zip", mysqllogFile[1].toCharArray())) {
    ZipParameters zipParameters = new ZipParameters();
    zipParameters.setEncryptFiles(true);
    // 新增:加密文件名/目录结构,实现整体加密
    zipParameters.setEncryptFileName(true);
    zipParameters.setEncryptionMethod(EncryptionMethod.AES);
    zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);

    zipFile.addFile("token", zipParameters);
    zipFile.addFile("mysqllog", zipParameters);

    // 删除原文件
    new File("token").delete();
    new File("mysqllog").delete();

    System.out.println("文件已成功加密压缩!");
} catch (ZipException e) {
    e.printStackTrace();
}

关键说明:

  • setEncryptFileName(true):这是实现整体加密的核心配置,没有它的话,Zip的目录结构是明文可见的,任何人都能打开Zip操作内部文件(即便文件内容已加密)。
  • 确保使用Zip4j 2.x及以上版本,Maven依赖示例:
<dependency>
    <groupId>net.lingala.zip4j</groupId>
    <artifactId>zip4j</artifactId>
    <version>2.12.0</version>
</dependency>
  • 从Java 8u151开始,默认已支持AES-256的无限制加密强度,无需额外配置JCE权限文件。

内容的提问来源于stack exchange,提问作者Ivan Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:49:57