C#:如何生成长度为7或8个字符的唯一密码

gua*_*ike 5 c#

我需要多次重复生成唯一密码,确保每次生成的密码都是唯一的,请帮帮我.

谢谢!

Ani*_*ani 2

所以这是另一种生成 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;
        }

    }
Run Code Online (Sandbox Code Playgroud)

现在你可以像这样调用这个方法:-

string GeneratedPassword = "";

GeneratedPassword = CryptedRandomString() + CryptedRandomString();

Console.WriteLine(GeneratedPassword.Substring(0,8));
Run Code Online (Sandbox Code Playgroud)

现在你们一定想知道为什么GeneratedPassword = CryptedRandomString() + CryptedRandomString();,我调用 CryptedRamdomString() 方法两次的原因只是为了确保它返回超过 10 位数字,这样会更容易获得八个字符的密码,否则如果调用一次有时它会生成少于八个字符的密码。

那么,在使用此方法之前,您必须考虑一件事,即使用“RNGCryptoServiceProvider”生成随机数比 Random.Next 更耗时。但“RNGCryptoServiceProvider”比“Random.Next”安全得多。