【问题标题】:How do you change the generator with the Rand crate?如何用 Rand 板条箱更换发电机?
【发布时间】:2020-06-08 17:11:48
【问题描述】:

“The Rust Rand Book”记录了各种生成器。 thread_rng 声称是加密安全的,而其他人则不然。但是,我没有看到任何关于如何更改生成器的参考。在使用thread_rng 时,我也看不到任何方法可以找出正在使用的生成器。我想对可用的各种选项进行测试,我该怎么做?

【问题讨论】:

    标签: random rust generator


    【解决方案1】:

    问:但是,我没有看到任何关于如何更改生成器的参考。

    “改变”这个词在这里并不合适,因为您只是创建另一个 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 分组密码。随着密码安全性和性能的新证据的出现,这种情况可能会发生变化。

    【讨论】:

    • 为此引入进口的正确方法是什么?我查看了文档并复制了示例(包括导入),我尝试的所有结果都导致:错误 [E0432]: unresolved import rand::rngs::SmallRng-- no SmallRng in rngs
    • 在文档中发现必须启用该功能,更改了我的cargo.toml并成功:rand = { version = "0.7.3", features = ["small_rng"] }跨度>
    猜你喜欢
    • 2022-01-20
    • 2020-01-20
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2020-12-26
    • 2022-01-17
    • 2020-06-13
    • 2022-01-24
    相关资源
    最近更新 更多