暴力破解算法——寻找密码(递归方法)
本文采用暴力破解算法的基本思想:
假设密码有0,1,2三个数组组成,密码长度为2,那么,密码的组成形式如下图所示
算法步骤
- 算法会递归到最后一层
- 判断生成的字符串是否一致
- 如果一致,找到密码,返回1,否则返回0
- “父函数”判断“子函数”返回的值,如果为0,则继续往下寻找;如为1,则返回1,以表示找到
对于算法的效率暂时没有去过多的去研究,如有改进的地方,欢迎指出一起探讨
#include "iostream"
#include "vector"
#include "string"
using namespace std;
int findPwd(int deep, string parent);
/*密码组成,有数字,小写字母,大写字母组成*/
static char charSource[] = { '0', '1', '2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k',
'l','m','n','o','p','q','r','s','t','u','v',
'w','x','y','z','A','B','C','D','E','F','G',
'H','I','J','K','L','M','N','O','P','Q','R',
'S','T','U','V','W','X','Y','Z'};
/*密码*/
string password = "000A0";
int main()
{
/*密码长度*/
static int pswLength = 5;
string pwd = "";
for (int j=0; j < sizeof(charSource); j++)
{
if (findPwd(pswLength, pwd + charSource[j]))
{
break;
}
}
getchar();
return 0;
}
/*递归寻找密码*/
int findPwd(int deep, string parent)
{
/*递归直到最后一层*/
if (deep == 1)
{
/*判断是否与密码相同,相同返回1,否则返回0*/
if (parent == password)
{
cout << "I had find the password: " << parent;
return 1;
}
else
return 0;
}
else
{
for (int j = 0; j < sizeof(charSource); j++)
{
/*递归并判断子树返回值,如若返回1,则函数结束,如返回0,继续往下寻找*/
if (findPwd(deep - 1, parent + charSource[j]))
{
return 1;
}
}
}
return 0;
}