📅  最后修改于: 2023-12-03 15:14:27.098000             🧑  作者: Mango
随机密码生成器是一款可以随机生成密码的工具,主要用于帮助用户创建更加安全的密码。使用C语言编写的随机密码生成器可以快速生成各类复杂度的密码,同时也带有一定的学习参考价值。
1.本程序使用C语言编写,需要提前配置C语言环境。
2.程序中所定义的常量可以根据实际需求进行修改,以达到更好的生成效果。
3.通过修改生成概率可以调整不同字符的出现频率。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define PASSWORD_LENGTH 12 // 密码长度
#define DIGIT_PROBABILITY 40 // 数字生成概率%
#define UPPER_PROBABILITY 30 // 大写字母生成概率%
#define LOWER_PROBABILITY 30 // 小写字母生成概率%
#define SYMBOL_PROBABILITY 10 // 符号生成概率%
int main() {
// 定义生成字符的候选集合
char digit[] = "0123456789";
char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char lower[] = "abcdefghijklmnopqrstuvwxyz";
char symbol[] = "!@#$%^&*()_+-=[]{}|;':\",./<>?`~";
char pool[256];
int poolCount = 0;
// 根据生成概率计算每个字符的生成上限
int digitMaxCount = PASSWORD_LENGTH * DIGIT_PROBABILITY / 100;
int upperMaxCount = PASSWORD_LENGTH * UPPER_PROBABILITY / 100;
int lowerMaxCount = PASSWORD_LENGTH * LOWER_PROBABILITY / 100;
int symbolMaxCount = PASSWORD_LENGTH * SYMBOL_PROBABILITY / 100;
// 根据生成上限构建字符候选池
for (int i = 0; i < digitMaxCount; i++) {
pool[poolCount++] = digit[rand() % (sizeof(digit) - 1)];
}
for (int i = 0; i < upperMaxCount; i++) {
pool[poolCount++] = upper[rand() % (sizeof(upper) - 1)];
}
for (int i = 0; i < lowerMaxCount; i++) {
pool[poolCount++] = lower[rand() % (sizeof(lower) - 1)];
}
for (int i = 0; i < symbolMaxCount; i++) {
pool[poolCount++] = symbol[rand() % (sizeof(symbol) - 1)];
}
// 如果候选池大小小于需要的密码长度,进行字符补足
while (poolCount < PASSWORD_LENGTH) {
pool[poolCount++] = pool[rand() % poolCount];
}
// 打乱字符池中的字符,获得随机密码
for (int i = poolCount - 1; i > 0; i--) {
int j = rand() % (i + 1);
char temp = pool[i];
pool[i] = pool[j];
pool[j] = temp;
}
// 打印生成的密码
printf("Password: %s\n", pool);
return 0;
}
随机密码生成器是一款简单、实用的工具,可以帮助用户生成更加安全的密码,防止密码被猜测和破解。通过学习此程序的实现原理,可以更加深入地理解随机数生成和字符操作等 C 语言基础知识。