2

生成具有 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

4 回答 4

5

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

如果您将这些随机数用于加密目的,您应该查看Blum Blum Shub。否则,请查看Mersenne Twister

要对有限集进行洗牌,请查看Fisher-Yates shuffle

于 2009-02-19T14:56:20.580 回答
3

洗牌的正确方法是使用Knuth Shuffle。它简单而完美。完美的意思是,假设使用好的 RNG,所有可能的卡片排序都是同样可能的。

于 2009-02-19T14:51:04.350 回答
0

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

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

于 2009-02-19T14:49:53.510 回答
-1

如果随机字节生成器很好,任何方法都同样有效,而且你的洗牌方法也是合适的。

于 2009-02-19T14:51:05.897 回答