C语言实现密码字典生成器
Posted 三角形ABC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现密码字典生成器相关的知识,希望对你有一定的参考价值。
使用C语言实现一个简单的密码字典生成器
介绍
在密码长度固定时,用简单的多重循环很容易就实现密码字典的生成,但是当密码长度较长或者密码长度不固定时,这种多重循环很难完成我们的需求了,遇到这样的问题,应该就需要交给递归了,这篇文章所描述的密码字典生成器就是利用递归算法来实现的。后来又增加了生日密码模式的功能,虽然这个功能很简陋,但也使其功能得以拓展。
递归生成字典函数
定义了全局变量来记录字典空间,利用递归算法实现了密码字典的生成。
#include<stdio.h>
int n=0,l,flag=0;
int min,max;
char p[10];
print(int n,int l,FILE* pf)
int j;
if(n==l)
fprintf(pf,"%s\\n",p);
flag++;
return;
for(j=min;j<=max;j++)
p[n]=(char)j;
print(n+1,l,pf);
生日字典函数
简单的闰年判断和月份日期遍历。
printday(int ymin,int ymax,FILE* pf)
int y,m,d,dmax;
for(y=ymin;y<=ymax;y++)
for(m=1;m <= 12;m++)
if(m==4||m==6||m==9||m==11)
dmax=30;
else if(m==2 && ((y%4==0&&y%100!=0)||y%400==0)==1)
dmax=29;
else if(m==2 && ((y%4==0&&y%100!=0)||y%400==0)==0)
dmax=28;
else
dmax=31;
for(d=1;d<=dmax;d++)
fprintf(pf,"%04d%02d%02d\\n",y,m,d);
flag++;
主函数
这一部分主要实现了功能的选择以及对一些参数的初始化设置。
int main()
int s1,s2;
int ymin,ymax;
FILE* pf = fopen("dict.txt", "w");
printf("请选择字典模式:\\n");
printf("1:字符串字典 2:生日字典\\n");
scanf("%d",&s1);
if(s1==1)
printf("请输入字符串长度:\\n");
scanf("%d",&l);
printf("请选择基础字符:\\n");
printf("1:大写字母 2:小写字母 3:数字\\n");
scanf("%d",&s2);
if(s2==1)
min=65, max=90;
else if(s2==2)
min=97, max=122;
else
min=48, max=57;
printf("正在执行,请稍候...\\n");
print(n,l,pf);
else
printf("请输入初始年份:\\n");
scanf("%d",&ymin);
printf("请输入终止年份:\\n");
scanf("%d",&ymax);
printf("正在执行,请稍候...\\n");
printday(ymin,ymax,pf);
printf("执行成功,字典空间为%d",flag);
return 0;
运行样例展示
以上是关于C语言实现密码字典生成器的主要内容,如果未能解决你的问题,请参考以下文章
java怎么实现自动生成一个由英文字母(区分大小写)、数字、符号组成,6-12个字符 的密码