龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

穷举密码算法

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
//******************************************************************* //在许多情况下我们需要穷举组合的算法,比如密码词典。 //这个算法的要害是密码下标进位的问题。 //另外本例子中的写文件语句

  //*******************************************************************

  

//在许多情况下我们需要穷举组合的算法,比如密码词典。

  

//这个算法的要害是密码下标进位的问题。

  

//另外本例子中的写文件语句效率比较低,为了降低算法复杂度没有优化。

  

//假如要提高写文件的效率,可以使用缓冲区,分批写入。

  

//*********************************************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::modecreatecfile::modewrite);

  

while(nlength<=nmaxl)

  

{

  

for(i=0;i

  

array[i]=0;

  

bnext=true;

  

while(bnext)

  

{

  

for(i=0;i

  

cpass[i]=a[array[i>;

  

cpass[i]='\0';

  

file.writestring(cpass);

  

file.writestring("

");

  

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();

  

}

  

精彩图集

赞助商链接