这是Java代码:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(someBytes);//someBytes is the seed
C#中是否有任何相等的方法?我得到的是不正确的:
RandomNumberGenerator rng = RNGCryptoServiceProvider.Create();
rng.GetBytes(someBytes);// out someBytes
我确实需要种子,因为Java代码确实需要,所以我必须将Java代码转换为C#。当我传递相同的种子时,我从C#获得的序列必须与Java相等。
最佳答案
抽象类System.Security.Cryptography.RandomNumberGenerator
及其具体实现未向开发人员公开用于设置种子的方法(尽管在内部,我怀疑它们实际上确实使用了一个)。
我怀疑那里的设计原理是,可重复性并不能构成“加密强度高”的随机值流。
如果您看一下具体的实现RNGCryptoServiceProvider
,虽然它确实公开了一个接受byte[]
的构造函数以大概初始化PRNG,但其文档说
这些话继续说
有关所使用的种子中所包含的东西的种类的信息,请参阅 CryptGenRandom
的MSDN文档。