暴力破解密码模拟程序,模拟暴力破译密码实现程序代码
2015-11-16 15:53
295 查看
暴力破解密码原理:
通过简单的变换密码组合,枚举所有可能的密码组合来尝试比对。总有一组组合是对的。不过这个需要通过大量的比对才能实现破解。所以,密码长度越长,数字字母和符号的组合,大小写组合等,将会大大提高密码的暴力破解难度。
程序实现暴力破解的模拟原理:
在ASCII编码范围内,对指定长度的密码进行排列组合,可想而知,长度越大,组合数越多。程序中使用的是全排列,排列了所有的组合情况,从编码的顺序来排,因此是最低效的。
生成一个排列组合,就和密码比对,判断是否一致。当然在实际情况中,是去尝试登陆或者做其他的。比如破解wifi密码,就是将生成的密码组合去登陆连接路由器。
程序中在密码的几位中,输出后在擦除,让密码组合在一个固定的位置变化,而不是大量的刷屏输出。这是函数里的最里层的for循环输出\b回退字符的作用。
实际应用场景:
实际破解时,通常有密码字典,说白了,就是常用的密码的列表。通过分析我们的密码,得知一些惯用的密码组合,比如88888888。所以一开始就是用这些惯用密码来尝试,不行的话,再从头到尾尝试。对于无法输入的字符自然不会出现在密码中,所以这些字符也都会跳过。
我们这个程序只是最基本的破解演示,如果要实际破解,则需要自己改进情况,根据实际情况优化算法。比如得知一个用户的生日,就可以使用生日组合来尝试,如果得到了姓名,就可以结合姓名信息组合尝试,信息越多,难度越低。
注意事项:
所以,我们在平时设置密码时,尽量不要用生日姓名等信息来设置密码,因为这些信息早已在网上泛滥,随处可查了。如果让某人盯上,然后破解密码,那是相当容易的事情。
不过,暴力破解并不是随处可用。几乎所有成熟的系统都会对登录次数做限制,超过多少次错误就拒绝连接登录。所以,也降低了暴力破解的风险。不过,你的信息泄露的太多,虽然不用暴力破解,也可以轻松的破解。
通过简单的变换密码组合,枚举所有可能的密码组合来尝试比对。总有一组组合是对的。不过这个需要通过大量的比对才能实现破解。所以,密码长度越长,数字字母和符号的组合,大小写组合等,将会大大提高密码的暴力破解难度。
程序实现暴力破解的模拟原理:
在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; }
相关文章推荐
- C++密码破解
- C++中值传递、指针传递和引用传递的比较
- Json转换Java对象和JavaList集合
- c++中的sort 函数
- 15-11-16 Eclipse 操作菜单汉译之 Navigate [浏览]
- Java中的枚举和泛型复习
- Struts2 iterator遍历集合
- Java中使用MD5进行计算摘要
- Java简介(4)-关键字
- eclipse远程调试
- [JAVA] java class 基本定义 Note
- [JAVA] java class 基本定义 Note
- [JAVA] 面向对象编程OOP Note
- Java基础编程之利用条件运算符的嵌套来计算学生成绩
- eclipse android 设置及修改生成apk的签名文件
- 注册yii2 js文件
- 想将SNTP协议的客户端和服务器端集成在一个系统中
- php N秒后自动跳转
- php函数strtr
- Json 转 java 对象 和 List集合