生成256个随机位数的最佳方法?

时间:2009-02-19 14:46:46

标签: random shuffle

使用256个随机位生成数字的最佳方法是什么?

连接随机字节是否有效?


byte[] data = new byte[32];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetNonZeroBytes(data); // should include zero bytes?
string number = BitConverter.ToString(data, 0).Replace("-", "");

此外,使用这些数字的非重复对一副牌进行排序是否合适呢?

4 个答案:

答案 0 :(得分:5)

是否可以连接随机字节取决于您使用的随机数生成器。一些随机数发生器表现出串行相关。对于这些随机数生成器,连接会很糟糕。

如果您使用这些随机数进行crypotgraphic目的,您应该查看Blum Blum Shub。否则,请查看Mersenne Twister

为了改组有限集,请查看Fisher-Yates shuffle

答案 1 :(得分:3)

使用Knuth Shuffle进行洗牌的正确方法。它简单而完美。假设使用良好的RNG,所有可能的卡片订单都具有相同的可能性。

答案 2 :(得分:0)

是的,连接随机字节会起作用。

编辑:不确定为什么你需要256位来洗牌一副牌,你能进一步扩展那部分吗?

答案 3 :(得分:-1)

如果随机字节生成器是好的,任何方法都可以正常工作,并且您的卡洗牌方法也是合适的。