穷举密码算法

资讯 驱动中国 若水 4,410 次阅读 0 条评论
分享 Q
//******************************************************************* //在许多情况下我们需要穷举组合的算法,比如密码词典。 //我在程序员大本营上不止一次看到有人需要穷举密码的算法,就写了一个。 //这个算法的关键是密码下标进位的问题。 //另外本例子中的写文件语句效率比较低,为了降低算法复杂度没有优化。 //如果要提高写文件的效率,可以使用缓冲区,分批写入。 //*********************************************BREATH.CNPICK.COM***** void CreatePassword() { #define PassWordMax 8//将生成密码的最大长度 char a[]="0123456789abcdefghijklmnopqrstuvwxyz";//可能的字符 long nDictCount=sizeof(a);//获得密码词典长度 char cPass[PassWordMax+2];//将生成的密码 long nMinL=1,nMaxL=3;//本例中密码长度从1-3 long Array[PassWordMax];//密码词典下标 ASSERT(nMinL<=nMaxL && nMaxL<=PassWordMax);//容错保证 long nLength=nMinL; register long j,i=0; BOOL bNext; CStdioFile file; file.Open("C:\\dict.txt",CFile::modeCreate|CFile::modeWrite); while(nLength<=nMaxL) { for(i=0;i<PassWordMax;i++) Array[i]=0; bNext=TRUE; while(bNext) { for(i=0;i<nLength;i++) cPass[i]=a[Array[i]]; cPass[i]=&acute;\0&acute;; file.WriteString(cPass); file.WriteString("\n"); for(j=nLength-1;j>=0;j--)//密码指针进位 { Array[j]++; if(Array[j]!=nDictCount-1)break; else { Array[j]=0; if(j==0)bNext=FALSE; } } } nLength++; } file.Close(); }
版权声明:本文由驱动中国整理发布,转载需注明出处与原文链接。如有疑问请联系 editor@qudong.com
本文价值 成为第一个评分的人
登录后为本文打分
网友评论0 条评论
正在回复 的评论取消
评论加载中…
🔐

登录后参与互动

评论、点赞均可赚积分
连续签到、邀请好友也有奖励 🎁

电脑端: 微信扫码登录 微信内: 一键登录

微信扫一扫

打开微信「扫一扫」,分享本文到朋友圈或好友