gpt4 book ai didi

c# - 这个 C# asp.net 随 secret 码代码是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:55 25 4
gpt4 key购买 nike

我是 .NET 和 C# 的新手,我想弄清楚这段代码是如何工作的:

public static string CreateRandomPassword(int PasswordLength)
{
String _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ23456789";
Byte[] randomBytes = new Byte[PasswordLength];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(randomBytes);
char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;

for(int i = 0;i<PasswordLength;i++)
{
///
/// I don't understand how this line works:
///
chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
}

return new string(chars);
}

我认为我已经很好地处理了其中的大部分内容。我无法理解以下行:

chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];

我知道代码会生成随机二进制数,并在 for 循环中使用这些随机数从 _allowedChars 字符串中选择一个字符。我不明白的是为什么这段代码使用取模运算符 (%) 来获取 _allowedChars 索引值。

感谢您的帮助

最佳答案

这只是旁注,但该代码被巧妙地破坏了。用于选择要选取的字符的模数运算符 (%) 不统一:它会比其他字符更喜欢某些字符(靠近数组前面的字符),这意味着密码不是真正随机的。攻击者可以使用它首先尝试更高概率的密码,并显着减少完成破解所需的时间。

关于c# - 这个 C# asp.net 随 secret 码代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2806543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com