简易密码生成器

一个批量生成随机密码的C++程序

代码放在了了Debian pastezone里,点这里就看得到啦

随机数生成用的是random库,使用mt19937_64生成器根据硬件状态生成

这是真随机数所以要比伪随机数rand()函数安全一些

码代码时的一些

众所周知,Ascii码里是有空格的

于是乎我的程序里有这么while循环来判断随机数是否超出范围或为空格,如果是就运行do里的部分

1
while (flag < 32 || flag ==39 || flag > 126);

其中flag==39就是判断是否为空格

然后我就发现输出里面有几率有空格 难搞哦

然后我一直debug,一直debug,就是找不到问题所在

直到今天查百科,才知道我下载的Ascii码表把32(space)和39(`)弄反了

造孽啊

其实可以打表来着,但是循环写都写了就这样吧

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <random>

int main() {
    std::random_device md;
    std::mt19937_64 rnd(md());
    size_t i, j;
    int n, flag, mo;
    std::cin >> n >> mo;
    int num[n];
    for (i = 0; i < n; i++)
        std::cin >> num[i];
    for (i = 0; i < n; i++) {
        for (j = 0; j < num[i]; j++) {
            flag = (int) rnd() % mo;
            do {
                do {
                    flag += (int) rnd() % mo;
                } while (flag < 33);
                do {
                    flag %= 126;
                } while (flag > 126);
            } while (flag < 33 || flag > 126);
            std::cout << char(flag);
        }
        std::cout << std::endl;
    }
    return 0;
}

如何使用

有C++环境的直接编译运行

没有的进入这个链接,把上面的代码复制进去,然后选择运行

在急速运行里输入以下内容,再点击运行

第一行,输入你要生成的密码个数n以及随便一个数字取模,中间使用空格断开

第二行,输入n个数字,为你要生成的密码的长度,中间使用空格断开

例如输入

1
2
4 114514
12 12 12 12

运行结果为

1
2
3
4
?Odo$n8Xf03{
jzVG$O-)aSLp
]'6V>]ijdsCl
Q?$G6/c"Cg>e
Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计,DoubleCat 修改
© Copyright Licensed under CC BY-NC-SA 4.0