【发布时间】:2020-06-08 17:11:48
【问题描述】:
“The Rust Rand Book”记录了各种生成器。 thread_rng 声称是加密安全的,而其他人则不然。但是,我没有看到任何关于如何更改生成器的参考。在使用thread_rng 时,我也看不到任何方法可以找出正在使用的生成器。我想对可用的各种选项进行测试,我该怎么做?
【问题讨论】:
“The Rust Rand Book”记录了各种生成器。 thread_rng 声称是加密安全的,而其他人则不然。但是,我没有看到任何关于如何更改生成器的参考。在使用thread_rng 时,我也看不到任何方法可以找出正在使用的生成器。我想对可用的各种选项进行测试,我该怎么做?
【问题讨论】:
问:但是,我没有看到任何关于如何更改生成器的参考。
“改变”这个词在这里并不合适,因为您只是创建另一个 RNG 实例并使用它。例如,您无法更改 thread_rng 返回的内容。
假设你想使用SmallRng。在使用它创建随机数据之前,您必须创建一个实例。有多种方法可以做到这一点,from_entropy 是最简单的一种。或者,您可以通过from_seed 提供您自己的种子。查看文档以获取更多信息。
创建 RNG 后,您现在可以生成随机数据,就像 thread_rng 返回的内容一样:
let mut rng = SmallRng::from_entropy();
println!("{}", rng.gen::<u32>());
问:在使用
thread_rng时,我也看不到任何方法可以找出正在使用的生成器。
The docs for ThreadRng 状态:“ThreadRng 使用与StdRng 相同的 PRNG 来提高安全性和性能”。 The docs of StdRng状态:
StdRng中的 PRNG 算法被选择为在当前平台上高效、统计上强大且不可预测(意味着加密安全的 PRNG)。当前使用的算法是 20 轮的 ChaCha 分组密码。随着密码安全性和性能的新证据的出现,这种情况可能会发生变化。
【讨论】:
rand::rngs::SmallRng-- no SmallRng in rngs