这几天闲着没事又想着用C++做一个密码生成器,方便我以后生成不容易破解密码,并且我还出了几种模式,感兴趣的可以下载下来看看。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdlib>
#include<ctime>
#include<conio.h>
#include<windows.h>
#define LL long long
using namespace std;
string s11;
char sf[27]={' ','~','!','@','#','$','%','^','&','*','_','+','-','=','/','(',')','{','}',';',':','[',']','<','>',',','.'};
void End(int tag){
if(tag==1)
printf("n生成成功!已为您保存到当前文件夹中的 password.txt ,请及时下载,重新生成密码会替换原来的密码!n");
else
printf("n生成成功!已为您保存到当前文件夹中的 password.csv ,请及时下载,重新生成密码会替换原来的密码!n");
}
int R(int x){
return ((LL)rand()*(LL)rand())%(LL)x+1ll;
}
void sj(){
printf("您选择的类型:纯随机强密码nn");
printf("请输入密码位数:");
int n;
scanf("%d",&n);
system("cls");
char ch='.',s[5];
string ri[5];
for(int i=0;i<=4;i++)
s[i]=' ',ri[i]=" ";
int now=1,g=4;
string ss[5];
ss[1]="数字";
ss[2]="大写字母";
ss[3]="小写字母";
ss[4]="特殊符号 ~ ! @ # $ % ^ & * _ + - = ? / ( ) { } ; : [ ] < > , .";
int flag=1;
while(ch!='k'){
printf("您选择的类型:纯随机强密码n");
printf("您输入密码位数:%dnn",n);
printf("nn请选择所包含的字符类型(可多选):n w s :上下控制n j :确定选择此项(再次输入j取消选择)n k :完成选择n n :");
if(flag==0)
printf("取消");
printf("全选n m :反选n (请先将输入模式调整为英文)nn");
s[now]='>';
for(int i=1;i<=g;i++)
printf(" %c %s %sn",s[i],ri[i].c_str(),ss[i].c_str());
ch=getch();
system("cls");
switch(ch){
case 'w':{
s[now]=' ';
now--;
if(now==0)
now=g;
break;
}
case 's':{
s[now]=' ';
now++;
if(now==g+1)
now=1;
break;
}
case 'j':{
if(ri[now]==" ")
ri[now]="√";
else
ri[now]=" ";
flag=1;
break;
}
case 'k':break;
case 'n':{
if(flag==1)
for(int i=1;i<=g;i++)
ri[i]="√",flag=0;
else
for(int i=1;i<=g;i++)
ri[i]=" ",flag=1;
break;
}
case 'm':{
int ggg=0;
for(int i=1;i<=g;i++)
if(ri[i]==" ")
ri[i]="√",ggg++;
else
ri[i]=" ";
flag=1;
if(ggg==g)
flag=0;
break;
}
default:{
printf("请输入'w','s','j','k','n'or'm' 谢谢合作!");
Sleep(1000);
system("cls");
break;
}
}
}
system("cls");
printf("您选择的类型:纯随机强密码n");
printf("您输入密码位数:%dn",n);
printf("您选择所包含的字符类型:n");
int u=0,ak[5]={0};
for(int i=1;i<=4;i++)
if(ri[i]!=" "){
printf(" %sn",ss[i].c_str());
u++;
ak[u]=i;
}
End(1);
FILE* l=fopen("password.txt","w");
for(int i=1;i<=n;i++){
int t=R(u);
char sd;
switch(ak[t]){
case 1:{
sd=R(10)-1+'0';
break;
}
case 2:{
sd=R(26)-1+'A';
break;
}
case 3:{
sd=R(26)-1+'a';
break;
}
case 4:{
sd=sf[R(26)];
break;
}
}
printf("%c",sd);
fprintf(l,"%c",sd);
}
return ;
}
void sr(){
string date;
while(1){
printf("请输入您的生日(纯数字)(如19980111):");
cin>>date;
if(date.size()!=8){
printf("输入格式不正确!");
Sleep(1000);
system("cls");
continue;
}
int flag=0;
for(int i=0;i<8;i++)
if(!isdigit(date[i])){
printf("输入格式不正确!");
Sleep(1000);
system("cls");
flag=1;
break;
}
if(flag==1)
continue;
break;
}
End(1);
int dk=8;
for(int i=0;i<dk;i++){
int kk=R(5);
if(kk!=1){
int dd=R(4);
while(dd--){
int pp=R(4);
string sd="";
switch(pp){
case 1:{
sd+=char(sf[R(26)]);
break;
}
case 2:{
sd+=char(R(26)-1+'A');
break;
}
case 3:{
sd+=char(R(26)-1+'a');
break;
}
case 4:{
sd+=char(sf[R(26)]);
break;
}
}
date.insert(i,sd);
i++;
dk++;
}
}
}
FILE* l=fopen("password.txt","w");
printf("%s",date.c_str());
fprintf(l,"%s",date.c_str());
return ;
}
void mz(int daa){
string name;
while(1){
if(daa==3)
printf("请输入您的姓名拼音全拼或首字母(纯小写字母)(如zhangsan(张三):");
else
printf("请输入这句话拼音全拼或首字母(纯小写字母)(如angszax(爱你孤身走暗巷)):");
cin>>name;
int flag=0;
for(int i=0;i<name.size();i++)
if(!islower(name[i])){
printf("输入格式不正确!");
Sleep(1000);
system("cls");
flag=1;
break;
}
if(flag==1)
continue;
break;
}
End(1);
int dk=name.size();
for(int i=0;i<dk;i++){
int kk=R(5);
if(kk!=1){
int dd=R(4);
while(dd--){
int pp=R(5);
string sd="";
switch(pp){
case 1:{
sd+=char(sf[R(26)]);
break;
}
case 2:{
sd+=char(R(26)-1+'A');
break;
}
case 3:{
sd+=char(R(10)-1+'0');
break;
}
case 4:{
sd+=char(sf[R(26)]);
break;
}
case 5:{
name[i]=name[i]-'a'+'A';
break;
}
}
name.insert(i,sd);
i++;
dk++;
}
}
}
FILE* l=fopen("password.txt","w");
printf("%s",name.c_str());
fprintf(l,"%s",name.c_str());
return ;
}
void self(int aad){
printf("请输入一个字符串:");
cin>>s11;
End(1);
int dk=s11.size();
for(int i=0;i<dk;i++){
int kk=R(5);
if(kk!=1){
int dd=R(4);
while(dd--){
int pp=R(5);
string sd="";
switch(pp){
case 1:{
sd+=char(sf[R(26)]);
break;
}
case 2:{
sd+=char(R(26)-1+'A');
break;
}
case 3:{
sd+=char(R(26)-1+'a');
break;
}
case 4:{
sd+=char(sf[R(26)]);
break;
}
case 5:{
sd+=char(R(10)-1+'0');
break;
}
}
s11.insert(i,sd);
i++;
dk++;
}
}
}
if(aad==5){
FILE* l=fopen("password.txt","w");
printf("%s",s11.c_str());
fprintf(l,"%s",s11.c_str());
}
else{
printf("初步加密密码:");
printf("%s",s11.c_str());
Sleep(1000);
}
return ;
}
void pl(){
system("cls");
char ch='.',s[15/*网站总个数+1*/];
string ri[15/*网站总个数+1*/];
for(int i=0;i<=14/*网站总个数*/;i++)
s[i]=' ',ri[i]=" ";
int now=1,g=14/*网站总个数*/;
string ss[15/*网站总个数+1*/],sss[15/*网站总个数+1*/];
ss[1]="微信";
sss[1]="weixin";
ss[2]="QQ";
sss[2]="QQ";
ss[3]="百度";
sss[3]="baidu";
ss[4]="哔哩哔哩";
sss[4]="bilibili";
ss[5]="抖音";
sss[5]="douyin";
ss[6]="快手";
sss[6]="kuaishou";
ss[7]="微博";
sss[7]="weibo";
ss[8]="Microsoft账户";
sss[8]="Microsoftzhanghu";
ss[9]="Apple ID";
sss[9]="AppleID";
ss[10]="Android账户";
sss[10]="Android账户";
ss[11]="小米账户";
sss[11]="xiaomizhanghu";
ss[12]="华为账户";
sss[12]="huaweizhuanghu";
ss[13]="Windows PIN";
sss[13]="WindowsPIN";
ss[14]="Linux账户";
sss[14]="Linuxzhanghu";
/*
ss[15]="";//网站原名
sss[15]="";//网站拼音
*/
int flag=1;
while(ch!='k'){
printf("初步加密密码:");
printf("%s",s11.c_str());
printf("nn请选择网站(可多选):n w s :上下控制n j :确定选择此项n k :完成选择n n :");
if(flag==0)
printf("取消");
printf("全选n m :反选n (请先将输入模式调整为英文)nn");
s[now]='>';
for(int i=1;i<=g;i++)
printf(" %c %s %sn",s[i],ri[i].c_str(),ss[i].c_str());
ch=getch();
system("cls");
switch(ch){
case 'w':{
s[now]=' ';
now--;
if(now==0)
now=g;
break;
}
case 's':{
s[now]=' ';
now++;
if(now==g+1)
now=1;
break;
}
case 'j':{
if(ri[now]==" ")
ri[now]="√";
else
ri[now]=" ";
flag=1;
break;
}
case 'k':break;
case 'n':{
if(flag==1)
for(int i=1;i<=g;i++)
ri[i]="√",flag=0;
else
for(int i=1;i<=g;i++)
ri[i]=" ",flag=1;
break;
}
case 'm':{
int ggg=0;
for(int i=1;i<=g;i++)
if(ri[i]==" ")
ri[i]="√",ggg++;
else
ri[i]=" ";
flag=1;
if(ggg==g)
flag=0;
break;
}
default:{
printf("请输入'w','s','j','k','n'or'm' 谢谢合作!");
Sleep(1000);
system("cls");
break;
}
}
}
int u=0,ak[15]={0};
for(int i=1;i<=14;i++)
if(ri[i]!=" ")
ak[++u]=i;
system("cls");
char ch2='.',s2[4];
string ri2[4];
for(int i=0;i<=3;i++)
s2[i]=' ',ri2[i]=" ";
int now2=1,g2=3;
string ss2[4];
ss2[1]="网站名拼音+'/'+初步加密密码(如:weixin/ah3d%hc)";
ss2[2]="网站名拼音首字母+初步加密密码+网站名拼音尾字母(如:wah3d%hcn)";
ss2[3]="在初步密码第(网站名拼音长度)位前插入在 shift+(网站名拼音长度)得到的字符(如:ah3d%^hc)";
while(ch2!='k'){
printf("初步加密密码:");
printf("%s",s11.c_str());
printf("nn请选择批量加密方式(单选):n w s :上下控制n j :选择此项(再次输入j取消选择)n k :完成选择nn");
s2[now2]='>';
for(int i=1;i<=g2;i++)
printf(" %c %s %sn",s2[i],ri2[i].c_str(),ss2[i].c_str());
ch2=getch();
system("cls");
switch(ch2){
case 'w':{
s2[now2]=' ';
now2--;
if(now2==0)
now2=g2;
break;
}
case 's':{
s2[now2]=' ';
now2++;
if(now2==g2+1)
now2=1;
break;
}
case 'j':{
for(int i=1;i<=g2;i++)
ri2[i]=" ";
ri2[now2]="√";
break;
}
case 'k':break;
default:{
printf("请输入'w','s','j'or'k' 谢谢合作!");
Sleep(1000);
system("cls");
break;
}
}
}
system("cls");
End(2);
FILE* l=fopen("password.csv","w");
fprintf(l,"网站,密码n");
switch(now2){
case 1:{
for(int i=1;i<=u;i++){
string ans=sss[ak[i]];
ans+="/";
ans+=s11;
printf("%s:n%sn",ss[ak[i]].c_str(),ans.c_str());
fprintf(l,"%s,%sn",ss[ak[i]].c_str(),ans.c_str());
}
break;
}
case 2:{
for(int i=1;i<=u;i++){
string ans="";
ans+=sss[ak[i]][0];
ans+=s11;
ans+=sss[ak[i]][sss[ak[i]].size()-1];
printf("%s:n%sn",ss[ak[i]].c_str(),ans.c_str());
fprintf(l,"%s,%sn",ss[ak[i]].c_str(),ans.c_str());
}
break;
}
case 3:{
for(int i=1;i<=u;i++){
string ans=s11;
string hc;
switch(sss[ak[i]].size()){
case 1:{
hc="!";
break;
}
case 2:{
hc="@";
break;
}
case 3:{
hc="#";
break;
}
case 4:{
hc="$";
break;
}
case 5:{
hc="%";
break;
}
case 6:{
hc="^";
break;
}
case 7:{
hc="&";
break;
}
case 8:{
hc="*";
break;
}
case 9:{
hc="(";
break;
}
case 10:{
hc=")";
break;
}
default:{
hc="?";
break;
}
}
if(ans.size()>=s11.size())
ans.insert(sss[ak[i]].size(),hc);
else
ans.insert(ans.size(),hc);
printf("%s:n%sn",ss[ak[i]].c_str(),ans.c_str());
fprintf(l,"%s,%sn",ss[ak[i]].c_str(),ans.c_str());
}
break;
}
}
return ;
}
int main(){
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle,&CursorInfo);//获取控制台光标信息 CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
srand((unsigned)time(NULL));
char ch='.',s[51];
for(int i=0;i<=50;i++)
s[i]=' ';
int now=1,g=6;
string ss[51];
ss[1]=" 纯随机强密码";
ss[2]=" 生日组合强密码";
ss[3]=" 姓名组合强密码";
ss[4]=" 一句话组合强密码";
ss[5]=" 自己输入无序字符串进行组合强密码";
ss[6]=" 众多网站批量生成同样规律的强密码";
while(ch!='j'){
printf("欢迎使用密码生成器n");
printf("请选择生成密码类型:w s上下控制,j确定 (请先将输入模式调整为英文)nn");
s[now]='>';
for(int i=1;i<=g;i++)
printf(" %c%sn",s[i],ss[i].c_str());//cout<<" "<<s[i]<<ss[i]<<endl;
ch=getch();
system("cls");
switch(ch){
case 'w':{
s[now]=' ';
now--;
if(now==0)
now=g;
break;
}
case 's':{
s[now]=' ';
now++;
if(now==g+1)
now=1;
break;
}
case 'j':break;
default:{
printf("请输入'w','s'or'j' 谢谢合作!");
Sleep(1000);
system("cls");
break;
}
}
}
switch(now){
case 1:{
sj();
break;
}
case 2:{
sr();
break;
}
case 3:{
mz(3);
break;
}
case 4:{
mz(4);
break;
}
case 5:{
self(5);
break;
}
case 6:{
self(6);
pl();
break;
}
}
printf("nnna感谢使用此密码生成器,最终解释权归吴同学所有!nn窗口将在10秒后自动关闭r");
for(int i=9;i>=0;i--){
Sleep(1000);
printf("窗口将在%2d秒后自动关闭r",i);
}
return 0;
}
<< · Back Index ·>>