c# - C# 中的安全随机数

标签 c# java

这是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/

相关文章:

java - 使用 Spark [`cartesian()` 问题创建邻居矩阵]

c# - 为什么在 lambda 表达式中调用委托(delegate)函数时会保留参数 i ?

c# - 有没有办法判断映射的驱动器是用 C# 映射为管理员还是标准用户?

Java 根据算术结果舍入 int 值

java - 如何将对象实例的类型与泛型进行比较?

java - 在 Java 中执行 get 请求会导致 HTTP 响应代码 : 415

c# - 使用 Oledb 命令构建查询以查询 AS400 数据库

c# - 是否有可能在实现 IDisposable 的类的析构函数中调用 GC?

C# 启动进程在 Pocket PC Windows CE 上最小化/隐藏

java - 线程未启动?