源码先锋

源码先锋

使用C语言实现简单的密码生成器

admin 43 85

现在对于密码的强度要求一般是包含大小写字母,包含数字,包含特殊字符,长度为8到20位数等等。下面就使用C语言来实现简单的密码生成器。

思路为:

.a.将特殊字符单独存放在一个字符数组中。

.b.假设密码长度为N,首先随机生成四个不重复的随机下标保存在一个新的数组中;

.c.分别让这四个随机下标对应的字符为随机的特殊字符,数字,小写字母,大小字母。这样就可以包含四种字符类型。

.d.上面已经生成四位密码,最后生成密码的其他部分。

.e.打印生成的密码。

示例代码如下,

//密码长度

','#39;,'%','^','','*'};

intrangeNumRand(intmin,intmax);

intarrHasNumber(intarr[],intfindNum,intlength);

charrandPasswordChar(intrandNum);

voidcreateRandPassword();

charpassword[SIZE]={};

intmain(){

srand(time(NULL));

//第一次创建随机密码

createRandPassword();

intarr[4]={};

for(inti=0;i10;i++){

printf("%c",password[i]);

}

return0;

}

//创建随机密码

voidcreateRandPassword(){

//定义一个数组,用来存储四个不重复的随机下标

intindexArr[4]={};

//生成随机下标

intindex=rangeNumRand(0,SIZE-1);

indexArr[0]=index;

intcount=1,temp;

while(1){

index=rangeNumRand(0,SIZE-1);

temp=arrHasNumber(indexArr,index,4);

if(temp==1){

//下标已经存在,则重新随机生成新的下标

index=rangeNumRand(0,SIZE-1);

}else{

//不存在,则将下标添加到数组中

indexArr[count]=index;

count++;

}

if(count==3){

break;

}

}

//随机生成一个特殊字符,添加到第一个随机下标的位置

password[indexArr[0]]=randPasswordChar(1);

//随机生成一个数字字符,添加到第二个随机下标的位置

password[indexArr[1]]=randPasswordChar(2);

//随机生成一个小写字母,添加到第三个随机下标的位置

password[indexArr[2]]=randPasswordChar(3);

//随机生成一个大写字母,添加到第四个随机下标的位置

password[indexArr[3]]=randPasswordChar(4);

for(inti=0;iSIZE;i++){

if(password[i]1){

//随机生成任意字符

password[i]=randPasswordChar(5);

}

}

}

//生成一个字符

charrandPasswordChar(intrandNum){

//randNum为5表示任意类型

if(randNum==5){

//指定生成的字符类型

randNum=rangeNumRand(1,4);

}

charresult;

inttemp;

if(randNum==1){

//特殊字符

inttemp=rangeNumRand(0,9-1);

result=specialCharacter[temp];

}elseif(randNum==2){

//数字

temp=rangeNumRand(48,57);

result=temp;

}elseif(randNum==3){

//生成随机小写字母,ASCII码[97,122]

temp=rangeNumRand(97,122);

result=temp;

}else{

//生成随机大写字母,ASCII码[65,90]

temp=rangeNumRand(65,90);

result=temp;

}

returnresult;

}

//产生任意范围内的随机数

intrangeNumRand(intmin,intmax){

intrandNum=rand()%(max-min+1)+min;

returnrandNum;

}

//判断整型数组中是否存在某一个元素

intarrHasNumber(intarr[],intfindNum,intlength){

intflag=0;

for(inti=0;ilength;i++){

if(arr[i]==findNum){

flag=1;

break;

}

}

returnflag;

}

测试结果一如下,

测试结果二如下,

测试结果三如下,