用c写一段自动生成随机密码的程序


  现在注册的网站和应用太多,对我来说,想出一个不带个人特征的密码太难,于是打算用刚学的一点c写一段生成随机密码的代码。详情如下:  

  首先,生成的密码分为两类:六位纯数字密码(各种跟钱相关的密码)和10位包含数字,大小写字母和特殊符号的密码(至于为什么是10位,纯粹是个人觉得刚好合适)。生成密码之前,需要选择生成哪种密码。为了保证生成的密码是随机的,如果只是用rand函数,每次运行时里面生成的密码不随机,所以要用srand函数,用当前时间做参数,生成随机密码。纯数字密码还好,生成就行了。组合密码,为了确保生成的密码同时包含数字,字母和符号,用nt value_n ; int value_c ;int value_s 的值判断是否三种元素都包含,有则输出,没有则重新生成。

  其次,生成的密码需要保存下来。如果每次生成的密码都需要再次人工记录,就太麻烦了。这里,用ofstream把生成的密码记录在一个“password"的txt文件里面。有时候,对生成的密码不满意,可以继续生成,直到对生成的密码满意为止。所有环境都是在VS2015社区版下,代码如下:

 

 

#include<iostream>
#include<fstream>
#include<ctime>
void password_num();
void password_ch();
void choice();
using namespace std;
ofstream outfile;

int main()
{
 choice();
 cout << endl;
 return 0;
}

 

void password_num()
{
 int password_o[6] = { 0 };
 for (int j = 0; j < 6; j++)
 {
  password_o[j] = rand() % 10;
  cout << password_o[j] << "  ";
  outfile << password_o[j] << "  ";
  if (5 == j)
   outfile << endl;
 }
}


void password_ch()
{
 int value_n = 0;
 int value_c = 0;
 int value_s = 0;
 char password_o[10] = { 0 };//生成的初始密码数组
 char password_f[10] = { 0 };//经过判断以后的密码数组
 for (int k = 1; k > 0;)
 {
  for (int j = 0; j < 10; j++)
  {
   password_o[j] = rand() % 127;
   if ((password_o[j] > 34) && (password_o[j] < 39)||(63==password_o[j])||(64==password_o[j]))       //生成符号
   {
    password_f[j] = password_o[j];
    value_s = 1;
   }
   if (((password_o[j] > 64) && (password_o[j] < 91)) || ((password_o[j]>96) && (password_o[j] < 123)))//生成字母
   {
    password_f[j] = password_o[j];
    value_c = 1;
   }
   if ((password_o[j] > 47) && (password_o[j] < 58))//生成数字
   {
    password_f[j] = password_o[j];
    value_n = 1;
   }
  }
  if (1 == value_c*value_n*value_s)//必须同时包含数字,字母,符号
   break;
 }
 for (int j = 0; j < 10; j++)
 {
  if (0 == password_f[j])
  {
   cout << "0  ";
   outfile << "0  ";
  }
  else
  {
   cout << password_f[j] << "  ";
   outfile << password_f[j] << "  ";
  }
  if (9 == j)
   outfile << endl;
 }
 cout << endl;
}


void choice()
{
 char input;
 while (1)
 {
  srand(time(0));
  outfile.open("password.txt", ios::app);//新建一个txt文档保存生成的密码

  system("cls");
  cout << "N或n:生成6位纯数字密码\n";
  cout << "M或m:生成10位包含数字、字母和符号的混合密码\n";
  cout << "输入q退出\n\n生成的密码自动保存在password.txt文档\n\n";
  cin >> input;
  if ('n' == input || 'N' == input)
  {
   password_num();
   cout << endl;
   cout << "输入任意字符继续,输入q退出\n";
   cin >> input;
   if ('q' == input || 'Q' == input)
    exit(0);
  }

  else if ('m' == input || 'M' == input)
  {
   password_ch();
   cout << "输入任意字符继续,输入q退出\n";
   cin >> input;
   if ('q' == input || 'Q' == input)
    exit(0);
  }
  else if ('q' == input || 'Q' == input)
   exit(0);
  else
  {
   cout << "输入错误,请重新输入\n\n\a";
   cin >> input;
   if ('q' == input || 'Q' == input)
    exit(0);
   system("pause");
  }
  cout << endl;
  outfile.close();
 }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM