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对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
 
随机推荐
- C++三大特性之多态
			
原文地址:https://qunxinghu.github.io/2016/09/08/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E5%A ...
 - 浅谈CSRF攻击方式(转)
			
add by zhj: 在看Django开发的应用时,看到了CSRF,然后搜到了这篇文章,讲的不错.其实CSRF 攻击也蛮简单的.当你登陆网站A后,会在本地存有cookie,在cookie没有过期的情 ...
 - 容器集成平台 rancher部署
			
下载rancher镜像 docker pull rancher/server:stable rancher/server:latest #开发版 rancher/server:stable #稳定版 ...
 - R语言学习笔记:基础知识
			
1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...
 - loadrunner 接口性能脚本编写(Get请求和Post请求)
			
前段时间接触了一下loadrunner的接口性能测试,然后尝试了一下手动编写脚本,毕竟录制这种东西,不是每次都能通的,而且录制下来的脚本,通常是有很多其他杂七杂八的请求夹杂在中间,没有达到真正的压测接 ...
 - iOS手机应用开发原型模板及开发流程
			
在开始做一个项目的时候,究竟需要准备些什么前期工作呢,在外包公司中,又是一个怎么样的开发步骤呢?下面,按照我的理解,说一下. 项目流程图 看上图,从左往右,如果我们仅是一名开发工程师,只需要关心上图中 ...
 - vue数据双向绑定原理
			
vue的数据双向绑定的小例子: .html <!DOCTYPE html> <html> <head> <meta charset=utf-> < ...
 - 在outlook中发邮件判断邮件发送成功的方法
			
早上给企业发了求职邮件,但是发送的时候,自己发现附件比较大,因为之前比较少使用这个工具来发邮件,所以发送之后没有提醒成功与否,求职心切,内心变得比较紧张. 所以查了查方法,发现了以下解决方案,现备注下 ...
 - RocketMQ 集群搭建--双Master方案
			
安装环境 jdk1.7 alibaba-rocketmq-3.2.6.tar.gz VM虚拟机redhat6.5-x64:192.168.1.201 192.168.1.202 Xshell4 部署 ...
 - java多线程----线程池源码分析
			
http://www.cnblogs.com/skywang12345/p/3509954.html 线程池示例 在分析线程池之前,先看一个简单的线程池示例. 1 import java.util.c ...