基于指定字符串的随机4位密码生成与暴力破解计数开发求助
随机密码生成与暴力破解次数统计实现
这里给你完整的可运行代码,直接解决需求:
import java.util.Random; public class PasswordCracker { public static void main(String[] args) { String alphabet = "ABCabc012!"; char[] charSet = alphabet.toCharArray(); int comboLength = 4; // 随机生成目标密码 Random random = new Random(); StringBuilder targetPwd = new StringBuilder(); for (int i = 0; i < comboLength; i++) { int randIdx = random.nextInt(charSet.length); targetPwd.append(charSet[randIdx]); } String target = targetPwd.toString(); System.out.println("目标密码(演示用):" + target); // 遍历所有组合找密码,统计次数 long guessTimes = 0; boolean isFound = false; // 四层循环遍历所有4位组合,找到就停 for (int i = 0; i < charSet.length && !isFound; i++) { for (int j = 0; j < charSet.length && !isFound; j++) { for (int k = 0; k < charSet.length && !isFound; k++) { for (int l = 0; l < charSet.length && !isFound; l++) { guessTimes++; // 拼出当前猜测的密码 String currentGuess = "" + charSet[i] + charSet[j] + charSet[k] + charSet[l]; if (currentGuess.equals(target)) { System.out.println("找到密码:" + currentGuess); System.out.println("总共猜了:" + guessTimes + "次"); isFound = true; } } } } } } }
关键点说明
- 随机生成密码:用
Random类从你的字符集里随机挑4个字符,拼出目标密码,打印出来是为了验证,实际用可以删掉这个打印。 - 遍历匹配逻辑:
- 在你原来的四层循环基础上,每次生成一个4位组合就把计数+1。
- 每次生成的组合直接和目标密码对比,匹配上就标记
isFound为true,所有循环都会因为&& !isFound的条件提前终止,不用白跑剩下的循环。 - 完全不需要额外存储所有组合,边生成边匹配就行,省内存还高效。
- 计数统计:用
long类型存次数,避免字符集大的时候int不够用(比如你这个字符集有11个字符,总组合数是11^4=14641,用int也够,但养成好习惯用long更稳妥)。
小优化建议
如果以后要生成更长的密码,四层循环太麻烦,可以改成递归生成组合,这样不管是4位还是N位都能复用代码。
内容的提问来源于stack exchange,提问作者lookingforhelp
相关产品推荐
相关产品推荐

