这是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文档。

09-05 03:42