GB | BIG5
|
| 首頁 > 編程技術 > 源碼天堂 > 正文 |
 |
| PHP:窮舉密碼算法 |
| 本文出自:CSDN 作者: breath (2001-07-23 06:00:00) |
<?php
//*******************************************************************
//在許多情況下我們需要窮舉組合的算法,比如密碼詞典。
//我在程序員大本營上不止一次看到有人需要窮舉密碼的算法,就寫了一個。
//這個算法的關鍵是密碼下標進位的問題。
//另外本例子中的寫文件語句效率比較低,為了降低算法復雜度沒有優化。
//如果要提高寫文件的效率,可以使用緩沖區,分批寫入。
//*********************************************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]='';
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();
}
?>
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
PHP:生成sessionid和隨機密碼的例子 (2001-07-23 07:00:00) PHP:窮舉密碼算法 (2001-07-23 06:00:00) PHP:404錯誤陷阱並email給管理員的程序 (2001-07-22 09:05:00)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |