当前位置:内核开发->病毒安全->暴力破解密码模拟程序,模拟暴力破译密码实现程序代码

原创版权标志暴力破解密码模拟程序,模拟暴力破译密码实现程序代码

作者:just  发表时间:2015-10-6  阅读:
[摘要] 通过简单的变换密码组合,枚举所有可能的密码组合来尝试比对。总有一组组合是对的。不过这个需要通过大量的比对才能实现破解。所以,密码长度越长,数字字母和符号的组合,大小写组合等,将会大大提高密码的暴力破解难度。所以,我们在平时设置密码时,尽量不要用生日姓名等信息来设置密码,因为这些信息早已在网上泛滥,随处可查了。如果让某人盯上,然后破解密码,那是相当容易的事情。
文章来源:C++技术网原创文章版权所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

    这个是一时对暴力破解密码产生兴趣而编写的一个模拟代码,用来感受暴力破解的过程,这个不用在电影中感受,就可以在自己电脑感受。同时也可以学习密码方面的知识,提高密码安全的意识,也可以锻炼 一些编码能力。

    下面是程序截图:

   

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

程序实现暴力破解的模拟原理:
    在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[n] = (char)i;
 if(n==len)
 {
 pw[n]='\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;
}


文章来源:C++技术网原创文章版权所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。


返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)

C++技术网群幕群聊

弹幕