现在对于密码的强度要求一般是包含大小写字母,包含数字,包含特殊字符,长度为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;
}
测试结果一如下,
测试结果二如下,
测试结果三如下,




