📄 生成密码字典的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 + -