C#项目的临时密码生成器

C#项目的临时密码生成器,c#,passwords,C#,Passwords,我们使用以下方法创建临时密码,我想知道这是否是一个好的做法,因为随机并不是真正的随机。 除了我们应该使用另一个有效字符列表生成它之外,我高度怀疑这是否足够随机: public static string CreatePassword(int length) { const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

我们使用以下方法创建临时密码,我想知道这是否是一个好的做法,因为随机并不是真正的随机。 除了我们应该使用另一个有效字符列表生成它之外,我高度怀疑这是否足够随机:

   public static string CreatePassword(int length)
            {
                const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
                StringBuilder res = new StringBuilder();
                Random rnd = new Random();
                while (0 < length--)
                {
                    res.Append(valid[rnd.Next(valid.Length)]);
                }
                return res.ToString();
            }
公共静态字符串CreatePassword(int-length)
{
常量字符串valid=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz1234567890”;
StringBuilder res=新的StringBuilder();
随机rnd=新随机();
而(0<长度--)
{
res.Append(有效[rnd.Next(有效.Length)]);
}
return res.ToString();
}
我们是否应该添加一些其他随机性,例如进程Id或类似的东西? 或者“新随机”只是需要一些盐


我在这里问的问题更具体,因为我问的是我提供的给定代码的具体问题。我的问题不是如何生成随机临时密码,而是我提供的代码如何存在问题,以及为什么答案和建议在这些方面更好。也许我应该把它放在“代码回顾”堆栈中。但我个人并不认为它与另一个问题完全相同。

对于web应用程序,我认为您可以使用。

对于web应用程序,我认为您可以使用。

对于web应用程序,我认为您可以使用。

对于web应用程序,我认为您可以使用。

您需要使用。e、 g

使用
Random
按一天中的当前时间进行播种。这意味着,如果用户知道(或猜测)密码生成的时间,攻击者可以生成与使用此功能的用户相同的密码。加密安全的随机函数不存在此缺陷:

CSPRNG需求分为两类:第一类是通过 统计随机性检验;第二,他们坚持得很好 受到严重攻击时,即使是在其初始或运行状态的一部分 可供攻击者使用

你需要使用一种新的方法。e、 g

使用
Random
按一天中的当前时间进行播种。这意味着,如果用户知道(或猜测)密码生成的时间,攻击者可以生成与使用此功能的用户相同的密码。加密安全的随机函数不存在此缺陷:

CSPRNG需求分为两类:第一类是通过 统计随机性检验;第二,他们坚持得很好 受到严重攻击时,即使是在其初始或运行状态的一部分 可供攻击者使用

你需要使用一种新的方法。e、 g

使用
Random
按一天中的当前时间进行播种。这意味着,如果用户知道(或猜测)密码生成的时间,攻击者可以生成与使用此功能的用户相同的密码。加密安全的随机函数不存在此缺陷:

CSPRNG需求分为两类:第一类是通过 统计随机性检验;第二,他们坚持得很好 受到严重攻击时,即使是在其初始或运行状态的一部分 可供攻击者使用

你需要使用一种新的方法。e、 g

使用
Random
按一天中的当前时间进行播种。这意味着,如果用户知道(或猜测)密码生成的时间,攻击者可以生成与使用此功能的用户相同的密码。加密安全的随机函数不存在此缺陷:

CSPRNG需求分为两类:第一类是通过 统计随机性检验;第二,他们坚持得很好 受到严重攻击时,即使是在其初始或运行状态的一部分 可供攻击者使用



听起来很有趣,但我也会对我们使用的方法是否合理感兴趣。我会考虑使用你在这里提供的东西。听起来很有趣,但我也会对我们使用的方法是否合理感兴趣。我会考虑使用你在这里提供的东西。听起来很有趣,但我也会对我们使用的方法是否合理感兴趣。我会考虑使用你在这里提供的东西。听起来很有趣,但我也会对我们使用的方法是否合理感兴趣。我会考虑使用你在这里提供的东西。下面是微软的一个小建议:我认为你应该将Random移出这个方法,使用它唯一的实例,而不是再次创建它。againI认为他们谈论的是密码加密,而不是生成。不确定。@Matthias如果您这样快速生成数字,您需要使用相同的
Random
实例。看这个例子:好吧,这要看情况。如果您认为您可能一次生成多个密码,这可能是一个问题。您可以创建一个
PasswordGenerator
类,该类具有要使用的
Random
静态实例。否则,您可能只需要使用内置的
System.Web.Security.Membership.GeneratePassword()
这是kyle建议的,因此您不必担心。下面是Microsoft的一点建议:我认为您应该将Random移出该方法,使用它的唯一实例,而不是再次创建它。againI认为他们谈论的是密码加密,而不是生成。不确定。@Matthias如果您这样快速生成数字,您需要使用相同的
Random
实例。看这个例子:好吧,这要看情况。如果您认为您可能一次生成多个密码,这可能是一个问题。您可以创建一个
PasswordGenerator
类,该类具有要使用的
Random
静态实例。否则,您可能只需要使用kyle建议的内置
System.Web.Security.Membership.GeneratePassword()
,这样您就不必担心了
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(saltValue);