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对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
随机推荐
- Linux IO多路复用之epoll网络编程及源码(转)
原文: 前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网 ...
- python 面向对象 新式类和经典类
# 经典类写法 # schoolMember.__init__(self, name, age, sex) # 新式类写法 super(Teather, self).__init__(name, ag ...
- nginx 11个处理阶段 && nginx lua 8个处理阶段
1. nginx 11 个处理阶段 nginx实际把请求处理流程划分为了11个阶段,这样划分的原因是将请求的执行逻辑细分,各阶段按照处理时机定义了清晰的执行语义,开发者可以很容易分辨自己需要开发的模块 ...
- 阿里云安装docker 指定版本
sh docker-install.sh 1.12.6 #ubuntu16.4 测试通过 #!/bin/sh set -e # # This script is meant for quick &am ...
- 怎么申请 bing api key
1:打开网址 https://login.live.com/ 注册帐号并登录(点击上图中的登录按钮即可),在新窗口点击下方的“立即注册”(有帐号的可以直接登录) 2:填写相关信息(推荐使用hotmai ...
- FAFU 1395
动态规划:...翻牌FAFU 1395 动态规划
- git参考文档
==================================================================================================== ...
- Linux中顿号
``的作用是运行``之间的命令,并且将命令运行的结果返回.一般shell脚本应该是这样:result=`ls -l` (用你的命令替换ls -l,这里只是举例)这样,result就有``里面的运行结果 ...
- Python:slice与indices
slice: eg: >>>e=[0,1,2,3,4,5,6] >>>s=slice(2,3) >>>e[s] [2] slice的区间左闭右开[ ...
- json-lib基础
一.json-lib所需的jar包: json-lib.jar,commons-beanutils.jar,commons-collections.jar,commons-lang.jar,commo ...