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语言实现密码字典生成器的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现密码字典生成器

java怎么实现自动生成一个由英文字母(区分大小写)、数字、符号组成,6-12个字符 的密码

crunch字典生成

什么工具能将给定的几个单词的所有组合生成指定位数的字典?跑hashcat用

C语言练习_2用C语言实现凯撒密码加密解密

C语言中说的按字典顺序是啥意思???