現在注冊的網站和應用太多,對我來說,想出一個不帶個人特征的密碼太難,於是打算用剛學的一點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();
}
}