我需要多次重复生成唯一密码,请确保每次生成的密码都是唯一的,请帮助我。
谢谢!
最佳答案
所以这是另一种生成cryptedRandom密码和线程安全的方法...
private string CryptedRandomString()
{
lock (this)
{
int rand = 0;
byte[] randomNumber = new byte[5];
RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();
Gen.GetBytes(randomNumber);
rand = Math.Abs(BitConverter.ToInt32(randomNumber, 0));
return ConvertIntToStr(rand);
}
}
private string ConvertIntToStr(int input)
{
lock (this)
{
string output = "";
while (input > 0)
{
int current = input % 10;
input /= 10;
if (current == 0)
current = 10;
output = (char)((char)'A' + (current - 1)) + output;
}
return output;
}
}
现在,您可以像下面这样调用此方法:-
string GeneratedPassword = "";
GeneratedPassword = CryptedRandomString() + CryptedRandomString();
Console.WriteLine(GeneratedPassword.Substring(0,8));
现在大家都想知道为什么
GeneratedPassword = CryptedRandomString() + CryptedRandomString();
,我两次调用CryptedRamdomString()方法的原因只是为了确保它返回的位数超过10位,这样就更容易获得八个字符的密码,否则,如果调用一次,有时会生成少于八个字符的密码。好吧,在使用此方法之前,您必须考虑一件事,即使用“RNGCryptoServiceProvider”生成随机数会比较费时,然后需要Random.Next。但是“RNGCryptoServiceProvider”比“Random.Next”安全得多。
关于C#: How to generate unique passwords with the length of 7 or 8 characters,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5576191/