C# 随机数 大整数 安全

C#安全随机数生成算法和安全性分析

廉价感情. 提交于 2019-12-05 14:27:15
如何评价一个随机数算法?个人认为,一个好的随机数算法,能提供足够的安全性和公平性,并拥有优异的性能。 真随机数发生器由于价格昂贵,并没有得到普遍采用。那么,伪随机数就出来了,比如sha1prng。伪随机数的安全性依赖于种子。怎么实现sha1prng和其他的伪随机数算法,我们现在不做讨论。java和C#都有相应的API,java的SecureRandom和C#的RNGCryptoServiceProvider。我们就不重复再轮子了。 上面的两个类都可以为我们提供伪随机的字节流。同时java还提供产生安全随机整数的API了,这里就不讨论java的安全随机数了。下面说说,怎么利用伪随机的字节流产生安全的高强度的随机整数。 有网友是这样实现,暂且命名为FastNextInt。 public int FastNextInt(int max) { byte[] bs = new byte[4]; generator.GetBytes(bs); int value = BitConverter.ToInt32(bs, 0); value = value % max; if (value < 0) value = -value; return value; } 这种算法可以快速地得到一个“随机”整数,但是这种方法使得在[0,max)范围内,各整数出现的频率是不一样的。很明显,前面k