用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