- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我为 11 年级计算机科学项目创建了一个程序,其中我制作了一个 Java 密码破解程序,可以暴力破解密码。但是,我想获得一些关于如何对我的 java 程序进行多线程处理(下面提供的代码)以加速暴力过程的建议。如果它有帮助的话,我正在运行 Intel 的 i7-3770 处理器,它是四核的,但每个核心有 2 个线程,因此一次有 8 个可能的线程。
这是代码:
import java.util.*;
import java.io.*;
class pwcracker
{
public static void main (String[] args)
{
Scanner scan = new Scanner( System.in );
Random rand = new Random();
Runtime.getRuntime().availableProcessors();
String pw, choices, guess;
long tries;
int j, length;
System.out.println("Enter a password that is up to 5 chars and contains no numbers: ");
pw = "" + scan.nextLine();
length = pw.length();
choices = "abcdefghijklmnopqrstuvwxyz";
tries = 0;
guess = "";
System.out.println("Your pw is: " + pw);
System.out.println("The length of your pw is: " + length);
System.out.println("for TEST- Guess: " + guess + "pw :"+pw);
if (guess != pw){
while (guess != pw)
{
j = 0;
guess = "";
while ( j < length )
{
guess = guess + choices.charAt( rand.nextInt ( choices.length() ) );
j = j + 1;
if (guess == pw)
{
System.out.println("Match found, ending loop..");
break;
}
}
System.out.println("2 Guess: " + guess + " pw :"+pw);
tries = tries + 1;
}
}
System.out.println("Here is your password: " + guess);
System.out.println("It took " + tries + " tries to guess it.");
}
}
最佳答案
这不是并行处理解决方案,而是一种更加优化的强力方法。您可以考虑将 Iterator 更改为 Spliterator。如果时间允许,我可能会在下一篇文章中提供 Spliterator 方法。
package pwcracker;
import java.util.Iterator;
import java.util.Scanner;
public class pwcracker {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String pw;
int length;
System.out.println("Enter a password that is up to 5 chars and contains no numbers: ");
pw = "" + scan.nextLine();
length = pw.length();
SequentialPatternGenerator generator = new SequentialPatternGenerator(length);
generator.forEachRemaining(test -> {if(pw.equals(test)) {
System.out.println("Your password: " + test );
}});
}
}
class SequentialPatternGenerator implements Iterator<String> {
private static final char[] CHOICES = new char[]{'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
private static final int MAX_INDEX = CHOICES.length - 1;
private boolean keepProducing = true;
private final int[] indexes;
public SequentialPatternGenerator(final int length) {
indexes = new int[length];
initIndexes();
}
private void initIndexes() {
for (int i = 0; i < indexes.length; i++) {
indexes[i] = 0;
}
}
@Override
public boolean hasNext() {
if (!keepProducing) {
return false;
}
for (int i = 0; i < indexes.length; i++) {
if (indexes[i] < MAX_INDEX) {
return true;
}
}
return false;
}
@Override
public String next() {
if (!keepProducing || !hasNext()) {
return null;
}
String next = produceString();
adjustIndexes();
return next;
}
public void stop() {
keepProducing = false;
}
private String produceString() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < indexes.length; i++) {
sb.append(CHOICES[indexes[i]]);
}
return sb.toString();
}
private void adjustIndexes() {
int i;
for(i = 0 ; i < indexes.length ; i++) {
if(indexes[i] < MAX_INDEX) {
indexes[i] = indexes[i] + 1;
break;
}
}
for(int j=0; j < i; j++) {
indexes[j] = 0;
}
}
}
关于java - 如何对java密码程序进行多线程暴力破解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894586/
GCC 可见性功能使我们能够去除共享库中我们不希望客户看到的那些 API。事实上我们不能使用 ldopen 来调用那些隐藏函数,但我想知道这是否足够安全以保护我们敏感的 API。 我只想得到一些关于共
这个问题在这里已经有了答案: C# Structs "this = ...." (2 个答案) Assignment of a struct value to this keyword (2 个答案
下面一段代码给大家介绍python破解geetest 验证码功能,具体代码如下所示: ?
默认的 WordPress 类别小部件不允许排除命名类别。 我创建了一个插件,该插件将自定义类别小部件添加到“可用小部件”列表中,这使我可以对要排除的项目进行一些控制。代码如下... 但是,我希望生
有一些语言支持足够强大的类型系统,它们可以在编译时证明代码不会在其边界之外寻址数组。我的问题是,如果我们要将这样的语言编译到 JVM,是否有某种方法可以利用它来提高性能并删除每次访问数组时发生的数组边
此时,毫无疑问,由于浏览器限制,在 TinyMCE 中右键单击粘贴是不可能的(除非用户专门启用它)。 但是,是否有任何解决方法,例如使用 JavaScript 捕获粘贴事件,将剪贴板内容粘贴到某个隐藏
我是 Angular JS 新手,找不到此问题的解决方案。我必须使用用 Angular 1.4 编写的在线 Web 表单(我无法控制),并且我想注入(inject)一些 JavaScript 来更改字
我正在考虑一种以 Oracle 不希望的方式使用物化 View 日志的解决方案。这个想法是为 Oracle 源和非 Oracle 目标实现快速刷新 MV 功能。我已经测试了这种方法以确认它有效,但我担
我需要更改几个 FIT 图像标题中的一些值以适合我拥有的一些测试数据。因此,我正在尝试立即破解 FIT 图像标题以与应用程序一起运行。 然而此刻 - 我什至看不到标题,别介意破解它。我运行 Ubunt
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我已经完成了我的网站制作,但后来我在 IE8 中加载了它。大问题!例如,我的一堆 div 和 span 元素似乎是透明的(它们应该有彩色背景),并且 float 元素不起作用。 当我开发我的网站时,我
纯粹的好奇心,不用于生产,因为显然它可能会导致重大问题。 对于 C++,当您分配新内存 (var *ch = new char[x]) 时,大小基本上存储在 ch[-1] 中,根据C++ 规范。 问题
能否请您提出解决 IE8 背景大小问题的最佳方法? 最佳答案 您可以引用background-size的“跨浏览器”解决方案。 据我所知,按照THIS TUTORIAL link即可实现,因为您没有代
我试图理解 gc,因为我在一个程序中有一个很大的列表,我需要删除它以释放一些急需的内存。我想回答的基本问题是我如何找到 gc 正在跟踪的内容以及已释放的内容?以下是说明我的问题的代码 import g
我们在 iOS 应用商店上有一个成功的应用程序内购买应用程序。每次购买完成时,我们都会将收据发送到我们的服务器,然后我们的服务器会使用 Apple 的服务器检查收据并记录苹果的响应(包括购买是否有效以
我正在尝试了解 Node 的内部工作原理,但我无法拼凑出用 js 编写的 Node 如何 Hook /绑定(bind)到用 C/C++ 编写的低级系统调用。 当我写这段代码时—— var http =
我的应用程序中有这个线程监视一组客户端套接字。我使用 select() 进行阻塞,直到客户端发出请求,这样我就可以在不增加线程的情况下高效地处理它。 现在,问题是,当我将新客户端添加到客户端列表时,我
我只做个简单的小例子,给大家一个思路,吼吼~~~~ 1使用工具 Reflector.exe 用来查看.net代码 这个就不用多说了它是学.net必备神器 Ildasm.exe:用来将dll,e
我正在创建一个基于 NSDocument 的应用程序,其中包含文档选项卡。我发现它并不是为此而设计的。 Apple 设计的架构允许单个文档使用多个窗口,但反之则不然。我基本上可以正常工作,但我开始遇到
我有这段 C 代码,我想知道是否可能如何绕过此检查? int fd, password, input; fd = open("/dev/urandom", 0); read(fd, &password
我是一名优秀的程序员,十分优秀!