怎么用java解压带密码的zip

qiang521qiang 2009-11-19 04:41:32
我现在想要解压密码已知的zip文件
不调用winrar 怎么用java代码实现啊

如果调用winrar怎么才能让解压的那个界面不显示啊?
最好附代码
...全文
826 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomdoglz 2009-11-20
  • 打赏
  • 举报
回复
留个名
phyerbarte 2009-11-20
  • 打赏
  • 举报
回复
上面代码
extractEntry中的参数"foo"就是解压密码
试下有用不。
phyerbarte 2009-11-20
  • 打赏
  • 举报
回复

AesZipFileDecrypter zipFile = new AesZipFileDecrypter( new File("doc/zipSpecificationAes.zip") );
ExtZipEntry entry = zipFile.getEntry( "zipSpecification.txt" );
zipFile.extractEntry( entry, new File("doc/zipSpecification.txt"), "foo" );


参考
http://blog.csdn.net/sgcl/archive/2009/10/16/4683973.aspx
第三方的zip解决方案,纯java
下载
http://code.google.com/p/winzipaes/downloads/list
pleili 2009-11-20
  • 打赏
  • 举报
回复
你可以用Java调用winrar解压程序啊!调用时加入后台运行参数,就没有解压界面了!
qiang521qiang 2009-11-20
  • 打赏
  • 举报
回复
高手帮忙指点一下
qiang521qiang 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 warison2008 的回复:]
用java做破解程序。哎低级啦,java不是这方面的强者,改用c++吧
[/Quote]
不是破解
是密码已知的情况 我就是想解压
道光2008 2009-11-20
  • 打赏
  • 举报
回复
用java做破解程序。哎低级啦,java不是这方面的强者,改用c++吧
qiang521qiang 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhangjihao 的回复:]
要注意的是,本程序不一定能解开你的压缩文件,如果是用java.util.zip包下的工具压缩的文件就可以。
[/Quote]
我的压缩的是调用winrar压缩的
但是解压我不想调用它 因为我的解压过程是任务计划完成。如果调用winrar会有解压的那个窗口出现
我不想让它有那个窗口
所以我想用java解压
我先试试能不能解压我的那个文件
qiang521qiang 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pleili 的回复:]
你可以用Java调用winrar解压程序啊!调用时加入后台运行参数,就没有解压界面了!
[/Quote]
加什么参数啊 才能没有解压界面啊
howsun_zh 2009-11-19
  • 打赏
  • 举报
回复
第一步:剥去密码:

下面方法是解密工作,参数:

srcFile:源文件地址
destfile:解密后的临时文件
pwd:密码


public static void decrypt(String srcFile, String destfile, String pwd) throws Exception {
SecureRandom sr = new SecureRandom();
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
DESKeySpec dks = new DESKeySpec(padding(Base64.encode(pwd.getBytes())));
SecretKey securekey = keyFactory.generateSecret(dks);

Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
InputStream is = new FileInputStream(srcFile);
OutputStream out = new FileOutputStream(destfile);
CipherOutputStream cos = new CipherOutputStream(out, cipher);
byte[] buffer = new byte[1024];

byte[] pwdByte = new byte[20];
int len = is.read(pwdByte);
byte[] hashByte = DigisterUtil.getHashEncode(pwd.getBytes());

if (len != 20 || hashByte.length != 20) {
throw new RuntimeException("密码错误");
}
for (int i = 0; i < 20; i++) {
if (pwdByte[i] != hashByte[i]) {
throw new RuntimeException("密码错误");
}
}

int r;
while ((r = is.read(buffer)) >= 0) {
cos.write(buffer, 0, r);
}
cos.close();
out.close();
is.close();
}


第二步:用ZipFile和ZipEntry解压缩文件:

ZipFile zipFile = new ZipFile(上面的临时文件);
Enumeration entryEnu = zipFile.entries();
while (entryEnu.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entryEnu.nextElement();
is = zipFile.getInputStream(entry);
bos = new ByteArrayOutputStream(is.available());
byte[] buff = new byte[8192];
int len = 0;
while ((len = is.read(buff)) != -1) {
bos.write(buff, 0, len);
}
bis = new ByteArrayInputStream(bos.toByteArray());
break;
}
temp.delete();

要注意的是,本程序不一定能解开你的压缩文件,如果是用java.util.zip包下的工具压缩的文件就可以。
qiang521qiang 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 phyerbarte 的回复:]
https://truezip.dev.java.net/
[/Quote]
没有看懂…………
phyerbarte 2009-11-19
  • 打赏
  • 举报
回复
https://truezip.dev.java.net/
lzh_me 2009-11-19
  • 打赏
  • 举报
回复
不会,帮顶...
压缩文件方法 该方法需要引用zip4j的jar文件 单个文件、多个文件压缩 /** * 使用给定密码压缩指定文件或文件夹到指定位置. * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"". * 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀; * 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名. * @param src 要压缩的文件或文件夹路径 * @param dest 压缩文件存放路径 * @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效. * 如果为false,将直接压缩目录下文件到压缩文件. * @param passwd 压缩使用的密码 * @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败. */ 方法详细见文件! 可选择文件list压缩 /** * 使用给定密码压缩指定文件list * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"". * 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀; * 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名. * @param src 要压缩的文件集合 * @param dest 压缩文件存放路径 * @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效. * 如果为false,将直接压缩目录下文件到压缩文件. * @param passwd 压缩使用的密码 * @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败. */ 方法详细见文件! 解压 /** * 使用给定密码解压指定的ZIP压缩文件到指定目录 * * 如果指定目录不存在,可以自动创建,不合法的路径将导致异常被抛出 * @param zipFile 指定的ZIP压缩文件 * @param dest 解压目录 * @param passwd ZIP文件的密码 * @return 解压后文件数组 * @throws ZipException 压缩文件有损坏或者解压缩失败抛出 */ 方法详细见文件! 一个简单的demo 欢迎大家指点,一起提升

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧