0

我的密码生成器有问题。

    var listOfCharacters = "abcdefghijklmnopqrstuvwxyz"
    chars = listOfCharacters.ToCharArray();
} // RB: I've reformatted the code, but left this brace in. 
  //     I think it should be removed though... 

string password = string.Empty;
for (int i = 0; i < length; i++) // length = 64
{
    int x = random.Next(0, chars.Length); // chars.Lenght = 26 

    if (!password.Contains(chars.GetValue(x).ToString()))
        password += chars.GetValue(x);
    else
        i--;
 }

 if (length < password.Length) password = password.Substring(0, length); //stucks here at 26 because all the 26 chars from the list are used one time so there are no more chars to use, but i want to use a char more than one time

 return password;

我的问题是:当我想创建一个包含 64 个字符的密码并且我使用示例 26 中的字符列表时,他在 26 处停止生成,因为他只从列表中取出所有 26 个字符一次。我需要在我上面的代码中使用一个多于一个字符的方法,因此不仅每个字符只有 1 次,而且例如他可以使用字母“a”3 次。

4

4 回答 4

3

您的代码有明确的检查,以确保您最多只使用一个字符 1 次。

if (!password.Contains(chars.GetValue(x).ToString()))
    password += chars.GetValue(x);
else
    i--;

删除此检查,您应该会没事的!

password += chars.GetValue(x);

编辑

请在下面找到您应该拥有的确切代码。

for (int i = 0; i < length; i++) // length = 64
{
    int x = random.Next(0, chars.Length); // chars.Lenght = 26 

    password += chars.GetValue(x);
}
于 2013-03-14T09:56:13.617 回答
1

我已经更新了您的代码,因此它一次添加了所有字符,如果需要更多字符(长度 > 26),那么它会再次开始添加每个字符。因此,最多 26 个字符的密码具有唯一字符,最多 52 个字符的密码具有每个可能的字符两次,等等。

var listOfCharacters = "abcdefghijklmnopqrstuvwxyz";
var chars = listOfCharacters.ToList();

string password = string.Empty;
for (int i = 0; i < length; i++) {
    int x = random.Next(0, chars.Count);

    password += chars[x];

    chars.RemoveAt(x);
    if (chars.Count == 0)
        chars = listOfCharacters.ToList();
 }

 if (length < password.Length) password = password.Substring(0, length);

 return password;
于 2013-03-14T10:03:36.220 回答
0

如果字符尚未添加到密码中,则仅添加字符:

if (!password.Contains(chars.GetValue(x).ToString()))

一旦添加了所有 26 个字符,它就不会再添加了。

于 2013-03-14T09:55:39.890 回答
0

试试这个:

string password = string.Empty;

for (int i = 0; i < length; i++)
{
    int x = random.Next(0, chars.Length);

    password += chars.GetValue(x);
}
于 2013-03-14T09:56:23.450 回答