功能要求:
具体类:
Decrypt 测试类,用来启动破解和日志线程
DecryptThread 破解线程类,用来生成测试的字符串,并暴力破解
LogThread 日志类,将输出每次生成的字符串结果集,并且设置为守护线程,等DecryptThread线程运行结束,也将停止运行
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package decrypt; import java.util.ArrayList; import java.util.List; import java.util.Random; public class Decrypt { // 生成长度为3的随机字符串 private static String getRandomStr() { char []chs = new char[3]; Random rd = new Random(); for(int i=0;i<3;i++) { // 生成 [0,10) 的数 chs[i] =(char) (rd.nextInt(10)+'0'); } return new String(chs); } public static void main(String[] args) { String password = getRandomStr(); List<String> list = new ArrayList<String>(); DecryptThread dec = new DecryptThread(list, password); LogThread log = new LogThread(list); dec.start(); log.start(); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package decrypt; import java.util.List; import java.util.ArrayList; public class DecryptThread extends Thread { boolean ok = false; private List<String> list; private String password; public DecryptThread() {} public DecryptThread(List<String> list,String password) { this.list = list; this.password = password; } @Override public void run() { char []chs = new char[3]; String str=null; for(int i=0;i<=9;i++) { for(int j=0;j<=9;j++) { for(int k=0;k<=9;k++) { chs[0]=(char)(i+'0'); chs[1]=(char)(j+'0'); chs[2]=(char)(k+'0'); str = new String(chs); list.add(str); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } if(str.equals(password)) { System.out.printf("成功匹配到密码,密码是%s%n",str); ok=true; return ; } } } } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package decrypt; import java.util.List; import java.util.ArrayList; public class LogThread extends Thread{ private List<String> list; LogThread(){} LogThread(List<String> list) { this.list = list; // 日志线程设置为 守护线程 this.setDaemon(true); } @Override public void run() { while(true) { while (list.isEmpty()) { try { Thread.sleep(50); }catch(Exception e) { e.printStackTrace(); } } String password = list.remove(0); System.out.printf("生成的字符串是%s%n", password); } } }
可改进功能:
1.字符串长度增加,并且不仅有数字还有字母以及 特殊字符
2.可以将log日志得到的结果 输出到文件,通过缓存来减少IO次数
3.可以将正确密码 加密 存到 数据库中,练习数据库的操作
4.暂时还没想到,嘿嘿