穷举法破解密码-方法详解

本文详细介绍了如何使用穷举法和递归策略来破解长度为3的字符串密码。首先,通过生成随机3字符密码,然后分别使用多层for循环和递归方法穷举所有可能的字符串组合进行匹配。穷举法基于逐一列举所有情况并检查条件,而递归则通过函数自我调用来解决规模较小的类似问题,具备明确的终止条件和问题规模缩小的特点。文中还给出了递归在文件系统遍历中的应用实例。
摘要由CSDN通过智能技术生成
  1. 生成一个长度是3的随机字符串,把这个字符串作为当做密码

  2. 使用穷举法生成长度是3个字符串,匹配上述生成的密码

要求: 分别使用多层for循环 和 递归解决上述问题

1.穷举法:
穷举算法,依赖计算机强大的计算能力,来穷举每一种可能的情况,以达到解决问题的目的,也叫枚举法、暴力破解法。

基本思想———逐一列举问题所涉及的所有情形,并根据问题提出的条件进行检验从而找到可能的解 。

方法步骤———确定枚举对象、枚举范围、判断条件;循环验证每一个解

2.递归:
递归的思想:
以此类推是递归的基本思想。

具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。

递归的两个条件:
可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
存在一种简单情境,可以使递归在简单情境下退出。(递归出口)

递归三要素:
一定有一种可以退出程序的情况;
总是在尝试将一个问题化简到更小的规模
父问题与子问题不能有重叠的部分
递归:自已(方法)调用自已
例子:用递归把目录下所有的目录及文件全部显示出来

方法一:多层循环方式

package day6;
/*
 * 练习-穷举法破解密码 
 * 	1. 生成一个长度是3的随机字符串,把这个字符串作为当做密码

	2. 使用穷举法生成长度是3个字符串,匹配上述生成的密码

	要求: 分别使用多层for循环 和 递归解决上述问题
 */
public class TestNumber10 {
   

	public static void main(String[] args) {
   
		//多层循环方式
		String password=randomString(3);//首先通过调用randomString()方法随机生成一个字符串作为密码,并将它赋值给password
		System.out.println("密码是:"+password);//输出这个密码
		
		char[]guesspassword=new char[3];//新建一个长度为3的空数组
		outloop://设置一个标签,在break的时候使用该标签,即能达到结束多重嵌套循环的效果
			//开始多层循环,也就是穷举
			for(short i ='0';i<='z';i++){
   
				for(short j ='0';j<='z';j++){
   
					for(short k ='0';k<='z';k++){
   
						if(!isLetterOrDigit(i,j,k)){
   //调用isLetterOrDigt()方法,如果i,j,k有一个不符合条件,就跳出当前循环,并开始下一次循环
							continue;
						}
						//如果i,j,k都符合条件,那就分别把i,j,k赋值给guesspassword数组的三个位置
						guesspassword[0]=(char)i;
						guesspassword[<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值