如何使用RNGCryptoServiceProvider类创建2位数的随机数?

时间:2016-11-06 11:33:52

标签: c#

我想获得一个随机数,但它有一定数量的数字,我无法减少。如何使用这种安全方法实际获得只有2位数的随机数?

    {   Console.WriteLine("{0}",GetRandom());Console.ReadLine();

    }
    private static int GetRandom()
    {

        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        {
             byte[] randomNumber = new byte[4];
             rng.GetBytes(randomNumber);
             int value = BitConverter.ToInt32(randomNumber,0);
             return value;

1 个答案:

答案 0 :(得分:0)

使用%modulo operator。通过RNGCryptoServiceProvider生成一系列PRNG是不正常的,但它的偏差小于System.Random
您的代码应如下所示:

private static int GetRandom(int min, max) {
using(System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider())
        {
             byte[] randomNumber = new byte[4];
             rng.GetBytes(randomNumber);
             int value = BitConverter.ToInt32(randomNumber,0);
             return Math.Abs(value%max+min);
        }
}

我已使用Math.Abs,因此您只能获得正数,但可以将其删除。