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对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
随机推荐
- pycharm中python模板代码自动生成
# -*- coding: utf-8 -*- """ ------------------------------------------------- File Na ...
- mysql python pymysql模块 增删改查 查询 字典游标显示
我们看到取得结果是一个元祖,但是不知道是哪个字段的,如果字段多的时候,就比较麻烦 ''' (1, 'mike', '123') (2, 'jack', '456') ''' 用字典显示查询的结果,也可 ...
- 苹果copy等其他的英文改成中文
程序plist有个参数localization native development region改成china
- redis5.0主从配置
1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...
- LeetCode--Two_Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- 接口测试xml格式转换成json
未经允许,禁止转载!!!! 接口测试一般返回的是xml和json,现在大多数时候是返回成json的格式,但是有时候也会出现xml格式, 由于xml格式的文件阅读起来不是很容易懂,所以尽量将xml转换成 ...
- 在MS SQL删除重复行的几种方法
1.如果有ID字段,就是具有唯一性的字段 delect table where id not in ( select max(id) ...
- JSON—序列化
表单数据的序列化 用SerializeArray()将有效控件序列化为JSON对象数组? 包含name和value两个属性 SerializeArray()检测一组表单元素中的有效控件? 1.没有 ...
- thinkphp+jquery+ajax前后端交互注册验证
thinkphp+jquery+ajax前后端交互注册验证,界面如下 register.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. ...
- css3 3d翻转效果
<div class="demo"> <span class="front"> aaaaaaaaaaa ...