求大神帮忙写一个暴力破解算法,c或Java都行,密码由数字和字母组成,最大密码长度10位最小一位?

2025-04-03 17:00:13
推荐回答(2个)
回答1:

import org.junit.Test;

public class T {

//最小长度
private int min = 1;
//最大长度
private int max = 10;
//准备数字,大小写
private char[] psw = {'0','1','2','3','4','5','6','7','8','9','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','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'};

@Test
public void t(){
for(int i=min; i<=max; i++){
permutation(psw, i);
}
}

/**
* 全排列入口
* @param array 密码数据
* @param n 密码长度
*/
private void permutation(char[] array, int n) {
permutation("", array, n);
}

/**
*
* @param s 已生成临时字串
* @param array 密码数据
* @param n 剩余未生成的字符长度
*/
private void permutation(String s, char[] array, int n) {
if(n == 1) {
for(int i=0; i //这是密码结果
String result = s+array[i];
System.out.println(result);
}
} else {
for(int i=0; i permutation(s+array[i], array, n-1);
}
}
}

}

不过建议不要暴力,有针对性会好一点

回答2:

暴力破解本身非常容易,使用遍历和字典都很容易。关键是需要破解的对象的交互方式或算法和如何判断成功破解。
例如有个3位数的拨轮,就是最简单的那种密码锁,电脑可以瞬间产生出 000-999 1000个暴力项,可是还是需要你人手一个一个拨,然后去看有没有开。 人手去拨就是交互,看看有没有被打开就是判断结果。如果电脑无法做这件事,暴力破解就没有意义。

你现在的情况也是这样。没人知道你的被破解对象,就无法知道交互和check。所以没人能写。