1. 用回调
void gen_words(char *buf,int buflen,int level)
{
char ** pptr;
int len;
if (buflen >= MAXPASS || level == 0){
printf("%s\n",buf);
return;
} /* output a word */
pptr = syllables ;
for (; *pptr != NULL ; pptr ++)
{
len = strlen(*pptr);
if ((buflen + len) <= MAXPASS)
{
strcpy(buf + buflen,*pptr);
gen_words(buf,buflen+len,level-1);
}
}
} 回调不理想的地方在于如果回调层次比较深(生成16位以上密码),而且生成密码之后马上用于运算的话,比较麻烦。生成算法和验证算法就杂糅在一起了...
2. GetBrouteforcePwd 写成N进制(N为密码字符集字符个数)转换函数 然后将字符一个个拼接起来
3. 还是N进制数字转换 不过GetNextPwd(char *NumStr); 传入一个字符串,返回下一个字符串
void InitMap()
{
memset(index_map, INVALID_NO, 256);
nCount = strlen(chars_set);
for (int i = 0; i < nCount; i++)
{
index_map[chars_set[i]] = i;
}
}
bool GetNextPwd(char *Password, int nLen)
{
int index = index_

本文探讨了密码字典生成算法,主要介绍了两种方法:一是通过回调机制,二是利用N进制转换函数拼接字符。此外,还提到了通过递归获取下一个密码字符串的策略。
最低0.47元/天 解锁文章
1707

被折叠的 条评论
为什么被折叠?



