怎么用java解压带密码的zip

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

如果调用winrar怎么才能让解压的那个界面不显示啊?
最好附代码
...全文
893 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]
不是破解
是密码已知的情况 我就是想解压
烟雨鹏城 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
  • 打赏
  • 举报
回复
不会,帮顶...

67,541

社区成员

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

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