Java 多线程 破解密码 demo
功能要求:
具体类:
Decrypt 测试类,用来启动破解和日志线程
DecryptThread 破解线程类,用来生成测试的字符串,并暴力破解
LogThread 日志类,将输出每次生成的字符串结果集,并且设置为守护线程,等DecryptThread线程运行结束,也将停止运行
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();
} }
decrypt类
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 ;
}
}
}
}
}
}
DecryptThread类
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);
}
} }
LogThread
可改进功能:
1.字符串长度增加,并且不仅有数字还有字母以及 特殊字符
2.可以将log日志得到的结果 输出到文件,通过缓存来减少IO次数
3.可以将正确密码 加密 存到 数据库中,练习数据库的操作
4.暂时还没想到,嘿嘿
Java 多线程 破解密码 demo的更多相关文章
- Java 多线程异步处理demo
java中实现多线程 1)继承Thread,重写里面的run方法 2)实现runnable接口通过源码发现:第一种方法说是继承Tread然后重写run方法,通过查看run方法的源码,发现run方法里面 ...
- java多线程的简单demo
模拟场景:顾客买车从车库中取车,厂家生产车,车存储在车库中.买家.厂家对同一个车库中的车操作 一.不加同步机制的代码如下: package com.joysuch.testng.thread; imp ...
- java多线程并发执行demo,主线程阻塞
其中有四个知识点我单独罗列了出来,属于多线程编程中需要知道的知识: 知识点1:X,T为泛型,为什么要用泛型,泛型和Object的区别请看:https://www.cnblogs.com/xiaoxio ...
- java 多线程断点下载demo
源码链接 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java ...
- java多线程(八)-死锁问题和java多线程总结
为了防止对共享受限资源的争夺,我们可以通过synchronized等方式来加锁,这个时候该线程就处于阻塞状态,设想这样一种情况,线程A等着线程B完成后才能执行,而线程B又等着线程C,而线程C又等着线程 ...
- java多线程(七)-线程之间的 协作
对于多线程之间的共享受限资源,我们是通过锁(互斥)的方式来进行保护的,从而避免发生受限资源被多个线程同时访问的问题.那么线程之间既然有互斥,那么也会有协作.线程之间的协作也是必不可少的,比如 盖个商场 ...
- java多线程(五)-访问共享资源以及加锁机制(synchronized,lock,voliate)
对于单线程的顺序编程而言,每次只做一件事情,其享有的资源不会产生什么冲突,但是对于多线程编程,这就是一个重要问题了,比如打印机的打印工作,如果两个线程都同时进行打印工作,那这就会产生混乱了.再比如说, ...
- java多线程(四)-自定义线程池
当我们使用 线程池的时候,可以使用 newCachedThreadPool()或者 newFixedThreadPool(int)等方法,其实我们深入到这些方法里面,就可以看到它们的是实现方式是这样的 ...
- java多线程(三)-Executors实现的几种线程池以及Callable
从java5开始,类库中引入了很多新的管理调度线程的API,最常用的就是Executor(执行器)框架.Executor帮助程序员管理Thread对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
随机推荐
- hammerjs wabapp h5 触屏手势一网打尽
hammerjs官网 http://hammerjs.github.io/ 学习文章1 http://www.cnblogs.com/vajoy/p/4011723.html 学习文章2 htt ...
- 2018中国(深圳)IT领袖峰会马化腾演讲全文《数字中国的机遇与探索》
我们今天大会的主题是数字中国,也佩服我们吴鹰主席在十年前就想到发展的趋势,这么早就把我们联合会取名数字中国.昨天有一个闭门会议,有相当大的篇幅大家都谈了科技.谈创新,大家觉得科技的威力和优势越来越明显 ...
- Tomcat项目部署的三种方法
第一种方法如下:直接把我们的项目文件夹放到tomcat里面,在这里我自己做的是一个测试项目oa,如图 启动tomcat,打开浏览器,输入localhost/oa 即可打开你的文件,注意 :访问的时候 ...
- Spark Sort Based Shuffle内存分析
分布式系统里的Shuffle 阶段往往是非常复杂的,而且分支条件也多,我只能按着我关注的线去描述.肯定会有不少谬误之处,我会根据自己理解的深入,不断更新这篇文章. 前言 借用和董神的一段对话说下背景: ...
- DataTable转换成IList 【转载】
链接:http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html#2738813 留着学习 using System; using Syst ...
- GridView 点滴
绑定数据时.在后台给GridView添加事件 protected void grd_RowDataBound(object sender, GridViewRowEventArgs e) { //当前 ...
- memcached小试牛刀
memcached安装 [root@localhost ~]# cd /usr/local/src [root@localhost src]#wget http://www.memcached.org ...
- 获取Android设备的唯一识别码|设备号|序号|UUID
如何获取一个能唯一标识每台Android设备的序号? 这个问题有很多答案,但是他们中的大部分只在某些情况下有效. 根据测试: 所有的设备都可以返回一个 TelephonyManager.getDevi ...
- 每天一个Linux命令(1)ls命令
ls是list的缩写,ls命令是Linux系统下最常用的命令之一. ls命令用于打印当前目录的清单,如果指定其它目录,那么就会显示其他目录的文件及文件夹的清单. 通过ls 命令还可以查看文件其它的详细 ...
- centos7.3上安装oracle xe 11g
oracle -11g-xe是数据库是免费版本,支持标准版的大部分功能.oracle XE版本也称快捷版本.是个个人学习,熟悉oracle的简化版. oracle XE做为免费的Oracle数据库版本 ...