密码字典生成工具_java

一个java写的密码字典生成工具

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /**  * 暴力破解密码生成工具  * @date 2017-4-21  * @version v1.0  */ public class PassGenerate {     public static String[] chars = null;     /**      * 调用方式 java -Xmx6000m PassGenerate 4 4 1      * @param args[0] 密码开始长度      * @param args[1] 密码结束长度      * @param args[2] 密码类型 0:全部类型 1:数字类型 2:小写字母 3:大写字母 4:特殊符号 组合直接拼接类型(如:12)      */     public static void main(String[] args) {         int start = Integer.parseInt(args[0]);         int end = Integer.parseInt(args[1]);         String combination = paramUtils.combination(args[2]);         chars = combination.split("");         generatePass(start, end);     }     public static void generatePass(int start, int end) {         StringBuilder str = new StringBuilder();         int count = 0;         for (double index = Math.pow(chars.length, start - 1); index < Math.pow(chars.length, end); index++) {             String pass = getNumPass(index);             if (pass.length() <= end) {                 str.append(pass).append("\r\n");             }             count++;         }         System.out.println(createPassFile(count, str));     }     public static boolean createPassFile(int num, StringBuilder str) {         Boolean flag = false;         String filePath = System.getProperty("user.dir") + "/" + num + ".txt";         File file = new File(filePath);         PrintWriter pw = null;         FileOutputStream fos = null;         try {             fos = new FileOutputStream(file);             pw = new PrintWriter(fos);             pw.write(str.toString());             pw.flush();             flag = true;         } catch (FileNotFoundException e) {             e.printStackTrace();         } finally {             try {                 if (fos != null) {                         fos.close();                 }                 if (pw != null) {                     pw.close();                 }             } catch (IOException e) {                 e.printStackTrace();             }         }         return flag;     }     public static String getNumPass(double num) {         int len = 1;         int pos = 0;         if (num % chars.length == 0) {             pos = 1;         }         while (Math.pow(chars.length, len) < num) {             len += 1;         }         len += pos;         int[] arr = new int[len];         int count = len - 1;         while (num >= chars.length) {             arr[count] = (int) (num % chars.length);             num = Math.floor(num / chars.length);             count--;         }         arr[count] = (int) num;         String result = "";         for (int i = 0; i < len; i++) {             result += chars[arr[i]];         }         return result;     }     static class paramUtils {         private static final String _0 = "0123456789abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPKRSTUVWXYZ!@#$%^&*()_+";         private static final String _1 = "0123456789";         private static final String _2 = "abcdefghijklmnopkrstuvwxyz";         private static final String _3 = "ABCDEFGHIJKLMNOPKRSTUVWXYZ";         private static final String _4 = "!@#$%^&*()_+";         private static String combination(String num) {             String[] chars = { _1, _2, _3, _4 };             String[] strs = num.split("");             Map<String, String> mapStr = new HashMap<String,String>();             for (String str : strs) {                 if("0".equals(str)){                     return _0;                 }                 mapStr.put(str, str);             }             StringBuffer sb = new StringBuffer();             Set<Entry<String, String>> et = mapStr.entrySet();             Iterator<Entry<String, String>> it = et.iterator();             while(it.hasNext()){                 Entry<String, String> nt = it.next();                 if(Integer.parseInt(nt.getValue()) > chars.length){                     return _0;                 }                 sb.append(chars[Integer.parseInt(nt.getValue())-1]);             }             return sb.toString();         }     } }