用C++生成随机字符串作为密码

原创 2018年04月17日 02:11:29

由于我们需要在大量的网站和APP注册,为了便于记忆,注册的用户名往往类似甚至一模一样,密码也经常一模一样或者类似。这是一种不好的习惯,因为黑客有可能获取网站和APP泄露的大量密码后,运用某种方法找到用户设置密码的习惯,这样账号就有了被盗的风险。为了避免黑客找到用户设置密码的习惯,最好的办法就是用随机字符串作为密码。

由于某些网站和APP要求密码包含特殊字符,另一些则不做强制要求。因此我们根据需要生成包含特殊字符的密码和不包含特殊字符的密码。默认密码长度为10,这应该是够用的。

下面是C++实现:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <vector>
using namespace std;

char getDigit()
{
    return static_cast<char>('0' + rand()%('9'-'0'+1));
}
char getLower()
{
    return static_cast<char>('a' + rand()%('z'-'a'+1));
}
char getUpper()
{
    return static_cast<char>('A' + rand()%('Z'-'A'+1));
}
char getSpecial()
{
    return static_cast<char>('(' + rand()%('/'-'('+1));
}
int main()
{
    ofstream output;
    output.open("pwd.txt");
    srand(time(0));
    char ch;    //保存随机生成的字符
    int num;    //决定随机生成字符的类型
    int npwd;   //输出密码的个数
    char type;  //决定密码是否包含特殊字符
    vector<char> str; //保存随机生成的字符串
    int count = 0; //判断某个密码中是否含有特殊字符
    cout << "Generate random password with special character " << endl;
    cout << "(Y for Yes and N for No): ";
    cin >> type;
    if(type != 'Y' && type != 'N')
    {
        cout << "Error!" << endl;
        return 0;
    }
    cout << "Enter the number of passwords: ";
    cin >> npwd;
    for(int j=0; j<npwd; j++)
    {
        for(int i=0; i<10; i++) //默认生成十位字符串密码
            {
                if(type == 'Y')
                    num = rand()%4;
                else
                    num = rand()%3;
                if(num == 0)
                    ch = getDigit();
                else if(num == 1)
                    ch = getLower();
                else if(num == 2)
                    ch = getUpper();
                else
                    {
                        ch = getSpecial();
                        count++;
                    }
                    str.push_back(ch);
            }
    while(type=='Y' && count==0)
    {
        str.clear();
        for(int i=0; i<10; i++) //默认生成十位字符串密码
            {
                if(type == 'Y')
                    num = rand()%4;
                else
                    num = rand()%3;
                if(num == 0)
                    ch = getDigit();
                else if(num == 1)
                    ch = getLower();
                else if(num == 2)
                    ch = getUpper();
                else
                    {
                        ch = getSpecial();
                        count++;
                    }
                    str.push_back(ch);
            }
    }
    count = 0;
    vector<char>::iterator p1;
        for(p1=str.begin(); p1!=str.end();p1++)
        {
            output << *p1;
        }
    output << endl;
    str.clear();
    }
    cout << "Done" << endl;

    return 0;
}

下面是输出5个包含特殊字符的密码的截图:

 

下面是输出8个不包含特殊字符的密码的截图:




Delphi命令行参数

 Delphi命令行参数            彭建雄转贴请与本从联系关键字Delphi、Command-Line、命令行参数说明本文是周末同MM吵架后,一气之作,英文太差请大家谅解通过下面的介绍,你...
  • programlover
  • programlover
  • 2001-10-15 12:23:00
  • 667

C和C++生成指定长度的随机字符串源码

  • 2011年09月30日 23:52
  • 70KB
  • 下载

C++ 随机生成数字和字母组合的字符串

一直学习java,今天突然要用到C++ 写个随机生成数字和字母组合的字符串。。。 #include #include #include using namespace std; char *ra...
  • Hoelne
  • Hoelne
  • 2015-01-06 11:46:28
  • 5903

randstr随机字符串(VC++)

#include #include using namespace std; string randstr(string strCharElem,int nOutStrLen) { strin...
  • sunflover454
  • sunflover454
  • 2015-11-15 12:33:31
  • 592

javascript随机生成字符串,可以用来生成随机密码

javascript随机生成字符串,可以用来生成随机密码
  • shilian_h
  • shilian_h
  • 2010-06-21 17:34:00
  • 1743

c++中生成n个m位的随机不重复字符串的一种方法(字母+数字)

本文系原创,转载注明。 想生成n个m位的随机不重复字符串。 以下n=15*15*15=3375; m=17 为例: 设定一个数组: public static string[] str = n...
  • ccm_oliver
  • ccm_oliver
  • 2016-03-31 22:00:04
  • 1910

VC++ GUID随机字符串生成

#include "stdafx.h" #include #include char* GuidToString(const GUID &guid); int _tmain(i...
  • zuoyefeng1990
  • zuoyefeng1990
  • 2016-08-30 15:09:46
  • 862

C/C++生成随机数字符串(错误方法和正确方法)

src
  • zhouzhenhe2008
  • zhouzhenhe2008
  • 2017-03-21 14:40:35
  • 532

C++取随机字符

void setRandString(QString & randString) { int max = 8; QString tmp = QString("0123456789abc...
  • lmhuanying1012
  • lmhuanying1012
  • 2017-10-17 18:33:13
  • 260

随机生成8位字符串密码

  • 2012年11月26日 23:19
  • 4KB
  • 下载
收藏助手
不良信息举报
您举报文章:用C++生成随机字符串作为密码
举报原因:
原因补充:

(最多只允许输入30个字)