#random #hash #performance #wyhash

no-std wyrand

快速且便携的非加密伪随机数生成器和哈希算法

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算法

Download history 126/week @ 2024-04-25 108/week @ 2024-05-02 75/week @ 2024-05-09 100/week @ 2024-05-16 93/week @ 2024-05-23 94/week @ 2024-05-30 110/week @ 2024-06-06 158/week @ 2024-06-13 119/week @ 2024-06-20 236/week @ 2024-06-27 210/week @ 2024-07-04 121/week @ 2024-07-11 202/week @ 2024-07-18 299/week @ 2024-07-25 145/week @ 2024-08-01 139/week @ 2024-08-08

798 每月下载量
用于 5 个crate(直接使用 2 个)

Apache-2.0 OR MIT

62KB
1.5K SLoC

WyRand-rs

CI License Cargo Documentation

用 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_coredebug 功能。

  • rand_core - 启用对 rand_core 的支持,在 WyRand 上实现 RngCoreSeedableRng
  • debug - 启用 core::fmt::Debug 实现,用于 WyRand/WyHash
  • serde1 - 启用 SerializeDeserialize 特性于 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 - 启用从 randthread_rng() 方法中获取熵。比 getrandom 快得多。如果尚未启用,则启用 randomised_wyhash。需要 std 环境。
  • legacy_v4 - 公开使用最终 v4 实现的遗留 PRNG/哈希算法。

为 WASM/Web 构建程序

如果您使用 WyRandrand_core 以及/或使用 WyHashrandomised_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"] }

许可证

根据您的选择许可

依赖项

~36–405KB