栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

使用C语言实现一个简单的密码字典生成器
    • 介绍
    • 递归生成字典函数
    • 生日字典函数
    • 主函数
    • 运行样例展示

介绍

在密码长度固定时,用简单的多重循环很容易就实现密码字典的生成,但是当密码长度较长或者密码长度不固定时,这种多重循环很难完成我们的需求了,遇到这样的问题,应该就需要交给递归了,这篇文章所描述的密码字典生成器就是利用递归算法来实现的。后来又增加了生日密码模式的功能,虽然这个功能很简陋,但也使其功能得以拓展。

递归生成字典函数

定义了全局变量来记录字典空间,利用递归算法实现了密码字典的生成。

#include

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,"%sn",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%02dn",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;
}
运行样例展示




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号