You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#生成多个不同随机密码时输出全部重复该如何解决?

问题原因

C#中Random类的默认构造函数以当前系统时钟作为种子生成随机序列,你代码中每次调用CreateRandomPassword方法时都会重新实例化一个Random对象,而循环执行速度极快,多次实例化操作间隔小于系统时钟的更新精度,导致所有Random对象使用了相同的种子,最终生成的随机序列完全一致,输出的5个密码也就全部相同。

修改方案

把Random实例从CreateRandomPassword方法内部提取到全局,让所有密码生成逻辑共用同一个Random实例即可解决重复问题。修改后的完整代码如下:

// 全局共用同一个Random实例,避免重复初始化导致种子相同
private static Random random = new Random();

static void Main(string[] args)
{
    int length = 7;
    int n = 5;

    for (int i = 0; i < n; i++)
    {
        string pass = CreateRandomPassword(length);
        Console.WriteLine("Password: " + pass);
    }

    Console.ReadLine();
}

private static string CreateRandomPassword(int length)
{
    string validChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@$#?%&";
    char[] chars = new char[length];
    for (int i = 0; i < length; i++)
    {
        chars[i] = validChars[random.Next(0, validChars.Length)];
    }
    return new string(chars);
}
可选优化

如果后续需要生成安全性要求更高的密码(非作业场景),可以改用.NET提供的加密级随机数生成器RandomNumberGenerator,随机性更强,不会出现种子重复问题。

内容的提问来源于stack exchange,提问作者New Here

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:36:04