void subgenerate(vector<string> &result, string subStr, int left, int right) { if(left == 0 && right == 0) { result.push_back(subStr); return; } if(left > 0) subgenerate(result, subStr + '(', left - 1, right + 1); if(right > 0) subgenerate(result, subStr + ')', left, right - 1); }
void generate(int pwdlen, int start, int end) { int i; for (i = start; i < end; i++) // 多线程可分段 { mypwd[0] = data[i]; memset(mypwd + 1, data[0], pwdlen-1); //填充长度 // printf("%s ",mypwd); if (!strcmp(goalPass, crypt(mypwd, "$1$AAODv...$"))) { printf("find password:%s", mypwd); exit(0); } subgenerate(1, pwdlen); } }
void subgenerate(int index, int pwdlen) { if (index == pwdlen) return; int i; for (i = 0; i < 36; i++) { mypwd[index] = data[i]; memset(mypwd + index + 1, data[0], pwdlen- index -1); if (i != 0) { // printf("%s ",mypwd); if (!strcmp(goalPass, crypt(mypwd, "$1$AAODv...$"))) { printf("find password:%s", mypwd); exit(0); } } subgenerate(index + 1, pwdlen); } }
vector<string> generateParenthesis(int n) { vector<string> result; subgenerate(result, "", n, 0); return result; }