№窮舉密碼演算法指要(原始碼) (轉)

worldblog發表於2007-12-11
№窮舉密碼演算法指要(原始碼) (轉)[@more@]//*******************************************************************
//在許多情況下我們需要窮舉組合的演算法,比如密碼詞典。
//這個演算法的關鍵是密碼下標進位的問題。
//另外本例子中的寫語句比較低,為了降低演算法複雜度沒有。
//如果要提高寫檔案的效率,可以使用緩衝區,分批寫入。
//*********************************************breath.cnpick.com*****

void createpass()
{
#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;iarray[i]=0;
bnext=true;
while(bnext)
{
for(i=0;icpass[i]=a[array[i]];
cpass[i]=';
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();
}

在下小站 ☆先鋒☆


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991342/,如需轉載,請註明出處,否則將追究法律責任。

相關文章