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

由于我们需要在大量的网站和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个不包含特殊字符的密码的截图:




阅读更多
文章标签: 密码
个人分类:
上一篇n!的素数分解
想对作者说点什么? 我来说一句

C++制作的随机密码生成工具

2009年02月03日 14KB 下载

没有更多推荐了,返回首页

关闭
关闭