while循环练习: 编写暴力破解密码。
创建一个项目: 用于输入密码
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
string pwd;
while (1) {
cout << "Please input your password: ";
cin >> pwd;
if (pwd == "000123") {
break;
}
else {
cout << "Password error." << endl;
}
}
cout << "login success" << endl;
cout << "1. 注册" << endl;
cout << "2. 管理" << endl;
cout << "3. 查询" << endl;
cout << "4. 删除" << endl;
system("pause");
return 0;
}
再创建一个项目: 暴力破解(直接使用循环尝试每一种代码的组合)
#include <iostream>
#include <Windows.h>
int main(void)
{
/*此代码实现暴力破解密码*/
/*用来存储密码的所有可能: 每一位的密码可能是0-9(9个) a-z(26个) A-Z(26个)和下划线之中的任意一个字符*/
char dict[64] = {0};
int index = 0; // 存放密码可能性数组的下标
/*存放生成的临时密码*/
char temp[32] = {0};
/*用来存储,0-9所有的可能型*/
for (int i = 0; i < 10; i++)
{
dict[index++] = '0' + i;
}
/*为了快速测试,我们目前假设密码只有0-9这些数字字符组成(如果63个都判断需要很长时间),所以将后面的注释掉*/
///*用来存储,a-z等26个小写字母*/
//for (int i = 0; i < 26; i++)
//{
// dict[index++] = 'a' + i;
//}
///*用来存储,A-Z等26个大写字母*/
//for (int i = 0; i < 26; i++)
//{
// dict[index++] = 'A' + i;
//}
//
///*用来存储下划线*/
//dict[index] = '_';
int n = index; /*字符个数*/
/*使用多重循环判断每一位密码的所有可能,进而得到每一种排列的可能,来找到正确的密码,假设密码有6位*/
for (int p1 = 0; p1 < n; p1++)
{
for (int p2 = 0; p2 < n; p2++)
{
for (int p3 = 0; p3 < n; p3++)
{
for (int p4 = 0; p4 < n; p4++)
{
for (int p5 = 0; p5 < n; p5++)
{
for (int p6 = 0; p6 < n; p6++)
{
temp[0] = dict[p1];
temp[1] = dict[p2];
temp[2] = dict[p3];
temp[3] = dict[p4];
temp[4] = dict[p5];
temp[5] = dict[p6];
std::cout << temp << std::endl;
}
}
}
}
}
}
system("pause");
return 0;
}
在文件中创建一个文件夹(用来存放):
分别在两个项目中找到对应的可执行文件:
复制粘贴到创建的文件中.
下一步:win+r -> cmd -> cd 跳转到文件夹的路径下,然后dir查看该文件夹的内容
可以看到该路径下有两个文件,然后输入如下图的指令:
这条指令表示: 构建一个通道,将前面程序的输出,作为后面程序的输入。
这样我们前面得到的所有密码情况会不断到后面的程序中尝试,直到结束.