如何使用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
您可以使用它从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文档中看到一个示例。