C/C++的循环嵌套应用(暴力破解)
上节我们介绍了循环嵌套。C/C++之循环嵌套
本节我们介绍应用。
要求:破解(账号密码)//假设密码为数字,字母,下划线的组合。
密码.exe
#include <iostream>
#include <string>
using namespace std;
int main(){
//密码
string password;
cout << "请输入密码:";
while(1){
cin >> password;
if(password == "67m93A0_"){
break;
}else{
cout << "密码错误,请重新输入:";
}
}
cout << "登陆成功!" << "密码:" << password <<endl;
return 0;
}
输入:663423
再输入67m93A0_
输出结果:
请输入密码:663423
密码错误,请重新输入:67m93A0_
登陆成功!密码:67m93A0_
接下来进行循环嵌套的实例:
为了方便快速,我们把需要破解的密码设置成000000345
破解程序:破解.exe
#include <iostream>
#include <string>
using namespace std;
int main() {
//10位密码,第11位为结束符0
char password[11];
char dict[64]; // 10个数字,26 + 26个字母,一个下划线,一个'/0'
int index = 0;
//初始化dict存可能的字符
for (int i = 0; i < 10; i++) {
dict[i] = '0' + i;
}
index = 10;
for (int i = 0; i < 26; i++) {
dict[index + i] = 'A' + i;
}
index = 36;
for (int i = 0; i < 26; i++) {
dict[index + i] = 'a' + i;
}
index = 62;
dict[index++] = '_';
dict[index++] = '\0';
password[10] = '\0';
//进行循环嵌套,破解密码10个字符,10重循环
//password的某一位为\0时,代表字符串结束,不需要进行后面的循环。
for (int i = 0; i < index; i++){
password[0] = dict[i];
for (int j = 0; j < index; j++){
password[1] = dict[j];
for (int k = 0; k < index; k++) {
password[2] = dict[k];
for (int l = 0; l < index; l++) {
password[3] = dict[l];
for (int m = 0; m < index; m++) {
password[4] = dict[m];
for (int n= 0; n < index; n++) {
password[5] = dict[n];
for (int o = 0; o < index; o++) {
password[6] = dict[o];
for (int p = 0; p < index; p++) {
password[7] = dict[p];
for (int q = 0; q < index; q++) {
password[8] = dict[q];
for (int r = 0; r < index; r++) {
password[9] = dict[r];
cout << password << endl;
}
}
}
}
}
}
}
}
}
}
return 0;
}
密码.exe需要输入,而破解.exe又能输出,那只要链接起来就可以打开cmd进入项目的Debug文件夹,将两个exe放到一个文件夹内。
如图使用破解.exe | 密码.exe
等待一会儿就会有:
本节我们介绍了循环嵌套得到应用,下节我们讲函数。