如何使用RNGCryptoServiceProvider C#生成非负随机数(整数)

时间:2015-04-01 12:38:46

标签: random rngcryptoserviceprovider

我需要在代码中生成非负随机整数。以下示例生成整数;

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
    {
        // Buffer storage.
        byte[] data = new byte[4];

        // Ten iterations.
        for (int i = 0; i < 10; i++)
        {
        // Fill buffer.
        rng.GetBytes(data);

        // Convert to int 32.
        int value = BitConverter.ToInt32(data, 0);
        Console.WriteLine(value);
        }
    }

参考:http://www.dotnetperls.com/rngcryptoserviceprovider 但它给出了积极和消极的价值观。如何仅生成非负随机整数? 我之前使用的是Random.Next(),它给了我正整数。

2 个答案:

答案 0 :(得分:1)

在您的具体情况下,只需使用ToUInt32代替ToInt32

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
    // Buffer storage.
    byte[] data = new byte[4];

    // Ten iterations.
    for (int i = 0; i < 10; i++)
    {
    // Fill buffer.
    rng.GetBytes(data);

    // Convert to int 32.
    int value = BitConverter.ToUInt32(data, 0);
    Console.WriteLine(value);
    }
}

答案 1 :(得分:0)

伪代码:

repeat
  temp <- RNG.nextInteger();
until temp >= 0;
return temp;