1、引用zip4j包

<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version>
</dependency>

2、获取所有可能的密码集合

package com.yymagicer.util;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @ClassName StringUtil* @Description* @Author yangxd* @Date 2021/5/6 16:39* @Version 1.0**/
public class StringUtil {/*** 数字*/public static final String NUMBER = "0123456789";/*** 字母*/public static final String ALPHABET = "abcdefghijklmnopqrstuvwyxz";/*** 符号*/public static final String SYMBOL = "~!@#$%^&*()_+[]{};,.<>?-=";/*** 获取指定的字符** @param includeNumber   是否包含数字* @param includeAlphabet 是否包含字母* @param includeSymbol   是否包含字符* @param length          字符长度* @return*/public static List<String> getStr(boolean includeNumber, boolean includeAlphabet, boolean includeSymbol, int length) {List<String> result = new ArrayList<>();StringBuffer sb = new StringBuffer();if (includeNumber) {sb.append(NUMBER);}if (includeAlphabet) {sb.append(ALPHABET);sb.append(ALPHABET.toUpperCase());}if (includeSymbol) {sb.append(SYMBOL);}if (sb.length() <= length) {result.add(sb.toString());}char[] chars = sb.toString().toCharArray();String[] strings = new String[chars.length];for (int i = 0; i < chars.length; i++) {strings[i] = String.valueOf(chars[i]);}String[] allLists = getAllLists(strings, length);return Arrays.asList(allLists);}/*** 获取指定位数的数据集合** @param elements 基类字符数组* @param length   指定字符串位数* @return*/public static String[] getAllLists(String[] elements, int length) {String[] allLists = new String[(int) Math.pow(elements.length, length)];if (length == 1) {return elements;} else {String[] allSublists = getAllLists(elements, length - 1);int arrayIndex = 0;for (int i = 0; i < elements.length; i++) {for (int j = 0; j < allSublists.length; j++) {allLists[arrayIndex] = elements[i] + allSublists[j];arrayIndex++;}}return allLists;}}/*** 获取全部字符集合,包含数字,字母,特殊字符** @param length* @return*/public static List<String> getFullStr(int length) {return getStr(true, true, true, length);}/*** 获取数字字符集合** @param length* @return*/public static List<String> getNumberStr(int length) {return getStr(true, false, false, length);}/*** 获取字母字符集合** @param length* @return*/public static List<String> getAlphabetStr(int length) {return getStr(false, true, false, length);}/*** 获取特殊符号字符集合** @param length* @return*/public static List<String> getSymbolStr(int length) {return getStr(false, false, true, length);}public static void main(String[] args) {final List<String> str = getNumberStr(4);System.out.println(str.toString());}}

3、解压工具类

package com.yymagicer.util;import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.FileHeader;import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;/*** @ClassName UnZipUtils* @Description* @Author yangxd* @Date 2021/5/7 10:20* @Version 1.0**/
public class UnZipUtils {public static void main(String[] args) throws IOException {String source = "E:\\BaiduNetdiskDownload\\test\\02.zip";String dest = "E:\\BaiduNetdiskDownload\\test";String password = "1234";boolean unZip = unZip(source, dest, password);System.out.println(unZip);}/*** @param source   原始文件路径* @param dest     解压路径* @param password 解压文件密码(可以为空)*/public static boolean unZip(String source, String dest, String password) {try {File zipFile = new File(source);// 首先创建ZipFile指向磁盘上的.zip文件ZipFile zFile = new ZipFile(zipFile);zFile.setFileNameCharset(StandardCharsets.UTF_8.name());// 解压目录File destDir = new File(dest);// 目标目录不存在时,创建该文件夹if (!destDir.exists()) {destDir.mkdirs();}if (zFile.isEncrypted()) {// 设置密码zFile.setPassword(password.toCharArray());}// 将文件抽出到解压目录(解压)zFile.extractAll(dest);List<FileHeader> headerList = zFile.getFileHeaders();List<File> extractedFileList = new ArrayList<>();for (FileHeader fileHeader : headerList) {if (!fileHeader.isDirectory()) {extractedFileList.add(new File(destDir, fileHeader.getFileName()));}}File[] extractedFiles = new File[extractedFileList.size()];extractedFileList.toArray(extractedFiles);for (File f : extractedFileList) {System.out.println(f.getAbsolutePath() + "文件解压成功!");}} catch (ZipException e) {return false;}return true;}
}

4、多线程处理逻辑

package com.yymagicer.core;import java.util.ArrayList;
import java.util.List;/*** @ClassName PasswordCrackService* @Description* @Author yangxd* @Date 2021/5/7 10:01* @Version 1.0**/
public interface PasswordCrackService {Integer THREAD_NUM = 5;String run(String source, String dest);default public List<List<String>> getShardingList(List<String> numberStr) {int num = numberStr.size() / THREAD_NUM;List<List<String>> dataList = new ArrayList<>();int index = 0;int temp = 0;while (temp < numberStr.size()) {temp = (index + 1) * num;dataList.add(numberStr.subList(index * num, temp > numberStr.size() ? numberStr.size() : temp));index++;}return dataList;}
}
package com.yymagicer.core;import com.yymagicer.util.StringUtil;
import com.yymagicer.util.UnZipUtils;
import org.apache.commons.lang3.StringUtils;import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.*;/*** @ClassName ThreadProcessPasswordCrackServiceImpl* @Description* @Author yangxd* @Date 2021/5/7 13:50* @Version 1.0**/
public class ThreadProcessPasswordCrackServiceImpl implements PasswordCrackService {private ThreadPoolExecutor threadPoolExecutor;public ThreadProcessPasswordCrackServiceImpl() {this.threadPoolExecutor = new ThreadPoolExecutor(4, 20, 60,TimeUnit.SECONDS, new LinkedBlockingQueue<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());}@Overridepublic String run(String source, String dest) {List<String> numberStr = StringUtil.getNumberStr(6);LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>();numberStr.forEach(num -> queue.offer(num));long startTime = System.currentTimeMillis();while (!queue.isEmpty()) {threadPoolExecutor.execute(() -> {String name = Thread.currentThread().getName();String key = queue.poll();if (StringUtils.isNotBlank(key)) {boolean result = UnZipUtils.unZip(source, dest, key);if (result) {try (FileWriter fileWriter = new FileWriter(dest + "\\password.txt")) {fileWriter.write(key);System.out.println("线程:" + name + ",密码是:" + key);queue.clear();} catch (IOException e) {e.printStackTrace();}} else {System.out.println("线程:" + name + "," + key + "密码错误");}}});}final long endTime = System.currentTimeMillis();System.out.println("共花费:" + (endTime - startTime) / 1000 + "秒");return null;}
}

5、测试

package com.yymagicer.core;/*** @ClassName Main* @Description* @Author yangxd* @Date 2021/5/7 10:00* @Version 1.0**/
public class Main {public static void main(String[] args) {PasswordCrackService service = new ThreadProcessPasswordCrackServiceImpl();String source = "E:\\BaiduNetdiskDownload\\test\\wzzz.zip";String dest = "E:\\BaiduNetdiskDownload\\test";service.run(source, dest);}
}

项目地址:源码地址

Java 暴力破解zip压缩包密码相关推荐

  1. Python 暴力破解zip文件密码(相对简单的密码)

               Python 暴力破解zip文件密码(相对简单的密码) 密码的使用范围很广,首先,我们要明确密码的作用,其次要明白密码的类型. 密码的作用是进行权限的限制,判断用户的合法性,(不 ...

  2. python暴力破解压缩包密码(python暴力破解zip压缩包)

    python暴力破解压缩包密码 简介 简介: ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料.ZI ...

  3. 使用python暴力破解zip压缩包的密码

    如果你有压缩包的密码忘记了,并且压缩包的加密算法采用的是ZipCrypto,并且压缩参数如下图所示: 那么你就可以使用本文中的方法进行破解. 压缩包的加密,是根据输入的密码进行运算加密,输入不同的密码 ...

  4. 暴力破解zip压缩包

    1:Windows下使用工具archpr工具进行破解 bandzip专业版也可以破解 2:python脚本破解 import zipfilef = open('password.txt', 'w') ...

  5. python破解zip压缩包密码

    曾经,在网上下载过一份"学习资料",zip格式的一份不小的压缩文件. 费劲巴拉的从"某盘"下载,却发现解压需要"密码",顿时心里有句不当讲的 ...

  6. 暴力破解zip文件密码

    先是用python写了一个,原理网上都有,我加了个界面,方便使用,同目录下放个pwd.txt,里面是密码列表,可以网上下载一些,或自己生成一个. import zipfile from threadi ...

  7. 使用fcrackzip暴力破解zip压缩包

    fcrackzip是一款用于破解zip类型压缩文件密码的工具 命令: fcrackzip -hUSAGE: fcrackzip[-b|--brute-force] use brute force al ...

  8. Python攻防-暴力破解ZIP加密文件的密码

    文章目录 前言 Python语法 自定义迭代器 Python多线程 Python脚本 单线程数字爆破 单线程字符爆破 多线程字典爆破 总结 前言 本文继续记录学习下 Python 的有趣应用:借助 P ...

  9. Python黑客入门:暴力破解zip,零基础也可以学会!

    照顾没有接触过Python编程的同学,行文可能会有些啰嗦. 废话少说,我们进入正题. 2.1准备基本材料 在/home/ziptest/目录下,我创建了两个文件,一个test.zip,是一个设置了密码 ...

  10. kali中爆破zip压缩包密码

    kali中爆破zip压缩包密码 1.安装fcrackzip sudo apt-get install fcrackzip 2.fcrackzip的使用 fcrackzip [选项] [选项] ... ...

最新文章

  1. html text 默认选中,html - 如何在Shiny中默认选择verbatimTextOutput中的文本? - SO中文参考 - www.soinside.com...
  2. SCOI 2014 new :未来展望
  3. spring中的注解配置
  4. ECharts 仪表盘的轴线宽度修改
  5. 开发指南专题十六:JEECG微云快速开发平台Excel导出
  6. 【Python】Python实战从入门到精通之五 -- 教你使用文件写入
  7. python os popen_Python os.popen() 方法
  8. 4.2 js没有块级作用域
  9. openwrt编译基本教程
  10. 两个队列实现一个栈(C++实现)
  11. 打开本地flash webview open swf
  12. 关于微信适配的坑==》ios、安卓强制微信字体
  13. python+matplotlib绘制南丁格尔玫瑰图
  14. Android 项目必备(三十八)-->APP 消息推送
  15. php怎么转mp4,php使用memcoder将视频转成mp4格式的方法
  16. 2020年计算机竞赛姜子敬,初赛公示_2020年全国高校计算机能力挑战赛
  17. 开源 | 携程机票BDD UI Testing框架 - Flybirds
  18. 微信发朋友圈如何只发文字?
  19. python爬取qq好友_Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)...
  20. MOOC【实用Python程序设计】_026正常血压

热门文章

  1. 决策树模型及案例(Python)
  2. 互联网人必看的免费引流方法:十八种免费引流小技巧
  3. C#如何消除按键提示声音?
  4. 51单片机流水灯现象2
  5. Linux监控平台搭建二
  6. 【Excel中阶技巧】表结构、函数、数据验证、导入导出、透视表、Power Pivot、其他技巧
  7. java 二维向量_二维向量的叉积是标量还是向量?
  8. 基于MyEclipse+JSP+Mysql+Tomcat开发得塞北村镇旅游网站设计
  9. wps文字下载 WPS Office 2012界面风格切换 想换就换
  10. 关于1931CIE——XYZ色坐标图转换到RGB色坐标关系