JAVA 解压有密码的ZIP文件(密码已知)

我在深圳搬砖-Justin 2010-01-11 12:14:17
org.apache.tools 解压已经实现

不知道有密码应该如何解决....
不要使用Windows自带的 winrar
...全文
1371 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
fantasy2436 2010-01-12
  • 打赏
  • 举报
回复
http://blog.alutam.com/2009/10/31/reading-password-protected-zip-files-in-java/
這個應該可以 去看看吧
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ivy007 的回复:]
Google上搜的:http://poplar1123.javaeye.com/blog/183904
[/Quote]
使用了
Winrar 是通过 cmd命令解压的.
ivy007 2010-01-11
  • 打赏
  • 举报
回复
Google上搜的:http://poplar1123.javaeye.com/blog/183904
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maer56 的回复:]
现在没有可以实现的,我以前找过,找不到相关文章
[/Quote]
就是找不到 才来提问的
maer56 2010-01-11
  • 打赏
  • 举报
回复
现在没有可以实现的,我以前找过,找不到相关文章
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 bao110908 的回复:]
zip 规范标准中好像是带有加密算法的,但是 JDK 和 Apache 中的 ZIP 没有实现。估计与加密算法的出口限制有关。
[/Quote]
岂不是杯具了
fantasy2436 2010-01-11
  • 打赏
  • 举报
回复
頂!
  • 打赏
  • 举报
回复
zip 规范标准中好像是带有加密算法的,但是 JDK 和 Apache 中的 ZIP 没有实现。估计与加密算法的出口限制有关。
  • 打赏
  • 举报
回复
to:zhangkai08111

搜索到过
但是 不懂 padding 这个方法是怎么写的
  • 打赏
  • 举报
回复
zip ?
\第一步:剥去密码:

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

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

Java code

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解压缩文件:

Java code

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包下的工具压缩的文件就可以。\

---from
http://topic.csdn.net/u/20091119/16/bd9e7aad-dd90-49d0-a921-40630926d201.html
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 huanqun1020 的回复:]
学习,帮顶
[/Quote]

谢了
huanqun1020 2010-01-11
  • 打赏
  • 举报
回复
学习,帮顶
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 maer56 的回复:]
放弃把,我早就放弃了。哈哈。如果你找到方法了,别忘了也告诉我下
[/Quote]
别啊 哥们... 别放弃啊啊
maer56 2010-01-11
  • 打赏
  • 举报
回复
放弃把,我早就放弃了。哈哈。如果你找到方法了,别忘了也告诉我下
  • 打赏
  • 举报
回复
很纠结的问题
没看到和加密有关的字眼

bayougeng 2010-01-11
  • 打赏
  • 举报
回复
不愿看API就在eclipse里“.”
然后看哪个方法名像,自己试试。
qq77504166 2010-01-11
  • 打赏
  • 举报
回复
学习一下,哈哈
maer56 2010-01-11
  • 打赏
  • 举报
回复
在代码里面用嵌入CMD命令
maer56 2010-01-11
  • 打赏
  • 举报
回复
你要么就用命令方式把,想靠代码完成估计是不可能了
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bayougeng 的回复:]
查查API啊,不会这么弱智,连设置解压密码的方法都没留吧。
[/Quote]

API 看的头大...
加载更多回复(3)

67,515

社区成员

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

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