【发布时间】:2013-12-01 22:30:19
【问题描述】:
似乎没有办法在 C# 中手动设置 RNGCryptoServiceProvider 的种子。我真的没有什么简单的方法可以在下面获取可重复的随机字节进行调试吗?
RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
byte[] randomBytes = new byte[20];
rngCsp.GetBytes(randomBytes);
MessageBox.Show(Convert.ToBase64String(randomBytes));
我知道我可以手动输入 20 个字节,但这很痛苦,因为我真的需要超过 20 个字节。另外,我知道我可以使用非密码随机数生成器,但最后,我需要最好的随机生成。
顺便说一句,我猜有些 CPU 内置了真正的随机生成,但实际上无法进行播种,但我认为我的 CPU 不具备这种能力。我想知道是否有人确切知道我可以用我的 CPU 做什么来重置 RNGCryptoServiceProvider 环境并欺骗 RNGCryptoServiceProvider 使用先前的种子......我想我可以将时钟调回去并在某处重置一些“用户日志位”......我知道这不切实际,但想知道是否有人在这方面取得过成功(尽管微软的目标可能是防止这种情况发生)。
【问题讨论】:
-
种子不可避免地会使其不安全。谷歌“.net mersenne twister”并获得第一击。
-
@HansPassant Mersenne Twister 在密码学上不安全。
-
@bobuhito 我无法想象你怎么能需要那种再现性——如果你每次都生成不同的假密钥有什么问题你调试?你到底需要这些字节做什么?
标签: c# visual-studio random prng