如何使用System.Security.Cryptography生成随机int值

本文关键字:随机 int Cryptography 何使用 System Security | 更新日期: 2023-09-27 17:59:13

我想使用System.Security.Cryptography生成从0到26的随机int值,我该怎么做?我知道可以使用system.random来做这件事,但我想使用system.Security.Cryptography

如何使用System.Security.Cryptography生成随机int值

您可以使用它从Crypto RNG生成随机int。然而,在密码学之外,我很难解释这样一个工具有用的场景。

RNGCryptoServiceProvider CprytoRNG = new RNGCryptoServiceProvider();
// Return a random integer between a min and max value.
int RandomIntFromRNG(int min, int max)
{
    // Generate four random bytes
    byte[] four_bytes = new byte[4];
    CprytoRNG.GetBytes(four_bytes);
    // Convert the bytes to a UInt32
    UInt32 scale = BitConverter.ToUInt32(four_bytes, 0);
    // And use that to pick a random number >= min and < max
    return (int)(min + (max - min) * (scale / (uint.MaxValue + 1.0)));
}
byte[] four_bytes = new byte[4];             
System.Security.Cryptography.RandomNumberGenerator.Create().GetBytes(four_bytes);
uint rand = BitConverter.ToUInt32(four_bytes, 0);
//range is 0 to 2^32-1, divide some number to limit it to the range you want

那么您应该为此使用RandomNumberGenerator类。但根据你发布的内容从0到26我认为您应该为此使用Random类。

为了生成加密强随机数的特定目的,您应该使用RNGCryptoServiceProvider类,该类继承自RandomNumberGenerator类,并提供生成加密随机数的机制,而不是直接使用RandomNumberGenerator类。

您可以在链接的MSDN文档中看到一个示例。