9 个版本
| 0.2.1 | 2024 年 7 月 22 日 |
|---|---|
| 0.2.0 | 2024 年 4 月 18 日 |
| 0.1.6 | 2024 年 3 月 26 日 |
| 0.1.3 | 2024 年 2 月 28 日 |
| 0.1.1 | 2023 年 3 月 25 日 |
#217 在 算法 中
798 每月下载量
用于 5 个crate(直接使用 2 个)
62KB
1.5K SLoC
WyRand-rs
用 Rust 编写的快速且便携的非加密伪随机数生成器,可选地,还包括哈希算法。
PRNG 和哈希器的实现都基于 C 引用实现 wyhash,这是一个简单且快速的哈希器,但 不是 加密安全的。它以其极快的速度和性能以及良好的统计特性而闻名。
此 crate 提供了 WyRand/WyHash 算法的 v4.2 最终实现或较旧的最终 v4 实现。由于算法和使用的常量发生变化,这两个版本具有不同的输出。默认情况下,将使用最终的 v4.2 算法。如果出于兼容性/稳定性原因需要使用较旧的、遗留的 v4 实现,可以通过启用 legacy_v4 功能标志来公开遗留的哈希器和 PRNG。
此 crate 可以独立使用,也可以与 rand_core/rand 集成,并且与 no-std 兼容。最低兼容 Rust 版本是 1.70。此 crate 还通过 #![forbid(unsafe_code)] 没有使用不安全代码来实现。
示例
生成随机值
use wyrand::WyRand;
// Provide a seed to the PRNG
let mut rng = WyRand::new(Default::default());
let value = rng.rand();
功能
该 crate 总是导出 WyRand,并在 Cargo.toml 中设置为 default-features = false 时导出。默认情况下,它将启用 rand_core、debug 功能。
rand_core- 启用对rand_core的支持,在WyRand上实现RngCore和SeedableRng。debug- 启用core::fmt::Debug实现,用于WyRand/WyHash。serde1- 启用Serialize和Deserialize特性于WyRand。hash- 启用core::hash::Hash实现,用于WyRand。wyhash- 启用WyHash,一种快速且可移植的哈希算法。基于最终的 v4 C 实现。randomised_wyhash- 启用RandomWyHashState,为WyHash提供随机状态的方法,用于集合如HashMap/HashSet。如果尚未启用,则启用wyhash功能。fully_randomised_wyhash- 不仅随机化RandomWyHashState的种子,还随机化密钥。新的密钥在每次运行时生成一次,然后用于每个后续的新的WyHash(每个WyHash实例都有自己的唯一种子)。如果尚未启用,则启用randomised_wyhash,并需要std环境。threadrng_wyhash- 启用从rand的thread_rng()方法中获取熵。比getrandom快得多。如果尚未启用,则启用randomised_wyhash。需要std环境。legacy_v4- 公开使用最终 v4 实现的遗留 PRNG/哈希算法。
为 WASM/Web 构建程序
如果您使用 WyRand 与 rand_core 以及/或使用 WyHash 与 randomised_wyhash,则为了构建 Web/WASM,您需要配置 getrandom 以利用浏览器 API 获取熵。如果您的 WASM 构建目标是 Web,请将以下内容添加到您的项目 Cargo.toml
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
getrandom = { version = "0.2", features = ["js"] }
许可证
根据您的选择许可
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
。
依赖项
~36–405KB