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 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
依赖项
~36–405KB