这是Java代码:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(someBytes);//someBytes is the seed
C#中有equal方法吗?我得到的是不正确的:
RandomNumberGenerator rng = RNGCryptoServiceProvider.Create();
rng.GetBytes(someBytes);// out someBytes
我确实需要种子,因为 java 代码需要,我必须将 java 代码翻译成 C#。当我传递相同的种子时,我从 C# 获得的序列必须与 java 相同。
最佳答案
抽象类 System.Security.Cryptography.RandomNumberGenerator
及其具体实现没有向开发人员公开设置种子的方法(尽管在内部,我怀疑他们确实使用了一个。)
我怀疑,那里的设计原理是,可重复性不会产生“加密强度高”的随机值流。
如果您查看具体实现,RNGCryptoServiceProvider
,虽然它确实公开了一个接受 byte[]
的构造函数来大概初始化 PRNG,它的文档说
This value is ignored.
评论继续说
This method does not directly initialize the RNGCryptoServiceProvider class. Calling this method is equivalent to calling the RNGCryptoServiceProvider constructor and passing null.
有关进入所用种子的信息,请参阅 CryptGenRandom
的 MSDN 文档
关于c# - C# 中的安全随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465312/