您的位置:首页 > 编程语言

暴力破解密码模拟程序,模拟暴力破译密码实现程序代码

2015-11-16 15:53 295 查看
暴力破解密码原理:

通过简单的变换密码组合,枚举所有可能的密码组合来尝试比对。总有一组组合是对的。不过这个需要通过大量的比对才能实现破解。所以,密码长度越长,数字字母和符号的组合,大小写组合等,将会大大提高密码的暴力破解难度。

程序实现暴力破解的模拟原理:

在ASCII编码范围内,对指定长度的密码进行排列组合,可想而知,长度越大,组合数越多。程序中使用的是全排列,排列了所有的组合情况,从编码的顺序来排,因此是最低效的。

生成一个排列组合,就和密码比对,判断是否一致。当然在实际情况中,是去尝试登陆或者做其他的。比如破解wifi密码,就是将生成的密码组合去登陆连接路由器。

程序中在密码的几位中,输出后在擦除,让密码组合在一个固定的位置变化,而不是大量的刷屏输出。这是函数里的最里层的for循环输出\b回退字符的作用。

实际应用场景:

实际破解时,通常有密码字典,说白了,就是常用的密码的列表。通过分析我们的密码,得知一些惯用的密码组合,比如88888888。所以一开始就是用这些惯用密码来尝试,不行的话,再从头到尾尝试。对于无法输入的字符自然不会出现在密码中,所以这些字符也都会跳过。

我们这个程序只是最基本的破解演示,如果要实际破解,则需要自己改进情况,根据实际情况优化算法。比如得知一个用户的生日,就可以使用生日组合来尝试,如果得到了姓名,就可以结合姓名信息组合尝试,信息越多,难度越低。

注意事项:

所以,我们在平时设置密码时,尽量不要用生日姓名等信息来设置密码,因为这些信息早已在网上泛滥,随处可查了。如果让某人盯上,然后破解密码,那是相当容易的事情。

不过,暴力破解并不是随处可用。几乎所有成熟的系统都会对登录次数做限制,超过多少次错误就拒绝连接登录。所以,也降低了暴力破解的风险。不过,你的信息泄露的太多,虽然不用暴力破解,也可以轻松的破解。

#include <iostream>
#include <string.h>
#include <stdlib.h>
char * pw = NULL;
char password[50];
int len =0;
bool po(int n);
using namespace std;
void main()
{
cout<<"请输入您的密码: ";
cin.getline(password,50);
len = strlen(password);
pw = new char[len+1];
for(int i=0;i<len+1;i++)
pw[i]=32;
int n=0;
cout<<"<<<整体匹配>>>:\n";
cout<<"破解进行中... 匹配>>";
if(po(n))
cout<<"您刚才输入的密码是: ["<<pw<<"]"<<endl;
system("pause");
}
bool po(int n)
{
if(n>len)return false;
for(int i=32;i<127;i++)
{
pw
= (char)i;
if(n==len)
{
pw
='\0';//如果此处忽略则不可能匹配成功
if(!strcmp(password,pw))
{
cout<<"破解成功!\n";
return true;
}
else
{
cout<<pw;
for(int n=0;n<len;n++)// - 清除上一个密码组合
cout<<"\b";
}
return false;
}
if(po(n+1))return true;
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: