其实对这个方式的密码破解,我也是想不通哪里的系统会用到。不过在电影中倒是经常出现。
电影的场景就是在紧张的情况下,主角用笔记本连接到系统,然后出现刷密码的界面,然后滚动密码,然后看到从左到右,密码一个个被确定,最后到完全匹配正确。这个破解原理,我至今都没有弄明白。
这种破解,只要限制尝试的次数,就可以防止。难不成主角早已把这个限制解除了吗?我没有留意到。逐个密码位确定,这样的设计是不是弱爆了。如果你清楚这个机制,请告诉我一下吧。交流学习一下。
不过,这里只是为了娱乐,演示了一把,满足一下好奇心而已,似乎对于现有的系统没有什么实际用途。
程序的运行截图如下:
由上图可以看出,这是在一个个的确定,从《暴力破解密码模拟程序,模拟暴力破译密码实现程序代码》文章我们可以知晓,这相当于把密码长度减少到了1位,然后多了很多个密码要破解。这还不是弱爆了。所以对于电影这个细节,真不知道怎么理解。在整体密码没有确定之前,你是没法保证一个位的密码数字就固定了的。或者电影中程序采取的算法是什么,可以做到这样的效果,不过我不解。算了,不纠结这个了。下面来看看代码吧:
#include <iostream>
#include <string.h>
#include <stdlib.h>
void main()
{
using namespace std;
cout<<"请输入您的密码: ";
char psw[100];
cin.get(psw,100);
int len = strlen(psw);
char * ppsw = new char[len+1];
for(int n=0;n<len+1;n++)
ppsw[n]=0;
cout<<"<<<逐个匹配>>>:\n";
for(int i=0;i<len;i++)//最后一个空字符不用匹配
{
cout<<"破解进行中...匹配>>";
for(int j=32;j<127;j++)
{
for(int m=0;m<5000000;m++);
cout<<(char)j<<"\b";
if(psw[i] == j)
{
ppsw[i]=j;
cout<<"\n密码第 "<<i+1<<" 个字符为: "<<(char)j<<endl;
break;
}
}
}
cout<<"\n破解成功!\n";
cout<<"你的密码是:"<<ppsw<<endl;
system("pause");
}
这里的算法就简单了,就不细说了。你如果不清楚,就花点时间来阅读吧。