生成不仅唯一的密码字母
本文关键字:密码 码字 唯一 | 更新日期: 2023-09-27 18:03:56
我的密码生成器有问题。
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次。我需要在我的代码上面的方法采取1个字符多于一个,所以不仅每个字符只是1次,但通过例子,他可以采取字母"a"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);
}
我已经更新了你的代码,所以它一次添加所有的字符,如果更多的字符是必要的(长度> 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;
您只能添加尚未添加到密码中的字符:
if (!password.Contains(chars.GetValue(x).ToString()))
一旦所有的26个字符被添加,它就不会再添加了
试试这个:
string password = string.Empty;
for (int i = 0; i < length; i++)
{
int x = random.Next(0, chars.Length);
password += chars.GetValue(x);
}