?? 生成密碼字典的c語言源代碼.txt
字號:
生成密碼字典的C語言源代碼[原創]
其實,也沒有用什么高深的知識。首先給定在密碼中可能會出現的字符,然后從n個字符中取r個字符的排列,就可以生成簡單的密碼字典了。在本程序中,是先從n個字符中選取r個字符的組合,然后再計算r個字符的全排列。有點麻煩了,但是對于理解密碼字典的制作原理,應該是足夠了。
#i nclude <ctype.h>
int n;
char a[68];/*存放可能的密碼*/
int cankao[68];/*求排列時用*/
int go_on;/*排列結束標志*/
void main(int argc,char *argv[])
{
char array[68]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.;'!#";/*可能的字符*/
int i;
void first(char *,int,int);
void fun(char *,int,int);
void usage();
int flag=0;
if(argc==1) /*下面幾個都是控制程序用法的*/
usage();
if(strcmp(argv[1],"/L")!=0&&strcmp(argv[1],"/l")!=0&&strcmp(argv[1],"/M")!=0&&strcmp(argv[1],"/m")!=0)
usage();
for(i=2;i<argc;i++)
if(strlen(argv[i])!=1||isdigit(argv[i][0])!=1)
flag=1;
if(flag==1)
usage();
if(strcmp(argv[1],"/L")==0||strcmp(argv[1],"/l")==0)
{
if(argc>4||argv[2][0]>argv[3][0])
{ usage();exit(-1);}
first(array,argv[2][0]-'0',argv[3][0]-'0');
}
else if(strcmp(argv[1],"/M")==0||strcmp(argv[1],"/m")==0)
{
for(i=2;i<argc;i++)
{
n=argv[i][0]-'0';
fun(array,67,n);
}
}
}
void first(char array[],int start,int end)
{
int i,j;
for(i=start;i<=end;i++)
{
for(j=0;j<68;j++)
a[j]=0;
n=i;
fun(array,67,i);
}
}
void sort(int arr[],int start,int end)
{ /*排序,求全排列用*/
int i,j;
for(i=start;i<end;i++)
for(j=start;j<end;j++)
if(arr[j]>arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
int next(int arr[],int end)
{ /* 用來求下一個排列*/
int i,j;
int temp;
for(i=end-2;i>=0;i--)
if(arr[i]<arr[i+1])
break;
for(j=end-1;j>i;j--)
if(arr[j]>arr[i])
break;
if(j==i)
{ go_on=0; return;}/*求排列結束*/
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
sort(arr,i+1,end);
}
void output()
{
int i;
for(i=0;i<78;i++)
if(i<=n)
cankao[i]=i;
else
cankao[i]=0;
go_on=1;
while(go_on==1)
{
next(cankao,n);
for(i=0;i<=n;i++)
printf("%c",a[cankao[i]]);
printf("\n");
}
}
void fun(char array[],int m,int k)
{/*求組合*/
int i,j;
for(i=m;i>=k;i--)
{
a[k-1]=array[i];
if(k>1)
fun(array,i-1,k-1);
else
{
output();
}
}
}
void usage()
{
printf("\nUSAGE:");
printf("\n(1)mimac /M 4 6 8");
printf("\nor\n(2)mimac /L 4 8");
printf("\nor\n(3)mimac /L 4 8 >file.txt\n");
}
這個代碼本來還有點問題,所以我加了密碼隱藏起來,今天想了一下,就不修改了,算是給朋友們一個發揮的余地吧,而是另外寫了一個BCB的版本,可以使用的BCB代碼可以參考下面的連接:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -