破解成功是第几次关键是看算法怎么做,从左到右穷举和从右到左穷举结果互补
#include stdio.h
#define For(i, flag) for(i = 0; i=9 flag==0; ++i)
int main()
{
int a[6];
int count = 1, flag = 0;
char password[7];
scanf("%s", password);
For(a[0], flag)
For(a[1], flag)
For(a[2], flag)
For(a[3], flag)
For(a[4], flag)
For(a[5], flag)
{
if(password[0]==a[0]+'0' password[1]==a[1]+'0' password[2]==a[2]+'0'
password[3]==a[3]+'0' password[4]==a[4]+'0' password[5]==a[5]+'0')
{
flag = 1;
break;
}
else
++count;
}
printf("%d", count);
return 0;
}
1、数据范围小的密码可以使用穷举法。这里从00到99,当作字符来处理,需要两重循环。
2、例程:
char a,b,c='1',d='2'; //这里变量c,d表示密码的第一位和第二位。
char key[2];
for(a='0';a='9';a++){
for(b='0';b='9';b++){
key[0]=a;
key[1]=b; //这就是一个密码
if(key[0]==c key[1]==d) printf("密码是:%s",key);//找到密码并输出
}
}
穷举法用于数据乱序或者没有太好办法时,罗列出所有可行答案来筛选:
1 百鸡问题
2 顺序查找
3 密码的暴力破解
穷举法是一种针对于密码的破译方法。这种方法很像数学上的“完全归纳法”并在密码破译方面得到了广泛的应用。简单来说就是将密码进行逐个推算直到找出真正的密码为止。比如一个四位并且全部由数字组成其密码共有10000种组合,也就是说最多我们会尝试9999次才能找到真正的密码。利用这种方法我们可以运用计算机来进行逐个推算,也就是说用我们破解任何一个密码也都只是一个时间问题。
当然如果破译一个有8位而且有可能拥有大小写字母、数字、以及符号的密码用普通的家用电脑可能会用掉几个月甚至更多的时间去计算,其组合方法可能有几千万亿种组合。这样长的时间显然是不能接受的。其解决办法就是运用字典,所谓“字典”就是给密码锁定某个范围,比如英文单词以及生日的数字组合等,所有的英文单词不过10万个左右这样可以大大缩小密码范围,很大程度上缩短了破译时间。
在一些领域,为了提高密码的破译效率而专门为其制造的超级计算机也不在少数,例如IBM为美国军方制造的“飓风”就是很有代表性的一个。 可以用c语言编程实现穷举法。例如:
使用穷举法列出100以内的素数
#includestdio.h
int main()
{
int n,i;
for(n=2;n=100;n++)
{
for(i=2;in;i++)
{
if(n%i==0) break;
}
if(i=n)
printf(%d\t,n);
}
}
显示结果为2,3,5,7,11,13,17,19,23,29,31,37,,41,47,53,59,61,67,71,73,83,89,97.
穷举法用于数据乱序或者没有太好办法时,罗列出所有可行答案来筛选。典型的适用穷举法的编程初学问题有:百鸡问题、顺序查找、密码的暴力破解等。穷举法的思路是,列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解答。用于解决“是否存在”和“有多少可能性”等类型问题。穷举法一般用循环或循环嵌套结构实现,要注意循环的起点和终点,对可能的情况不能遗漏,一般也不应重复。1、穷举法的基本思路是把问题涉及的可能情况一一罗列出来,并且根据题目的条件和实际背景逐个作出判断,从中挑选出符合条件的解答。2、使用穷举法时,要恰当地设计变量,并且决定用哪些变量作为搜索的主线,以便穷举出所有可能情况。3、穷举一般使用循环结构,要注意循环的起点和终点,对可能的情况不能遗漏,一般也不应重复。4、编制程序时,还应当根据题目要求准确地写出是否符合条件的判断语句。