#hash #deterministic #no-std

no-std deterministic-hash

创建不受架构影响的确定性哈希

2 个稳定版本

1.0.1 2021年7月12日

#1262 in 加密学

Download history 100/week @ 2024-04-14 106/week @ 2024-04-21 101/week @ 2024-04-28 333/week @ 2024-05-05 153/week @ 2024-05-12 182/week @ 2024-05-19 144/week @ 2024-05-26 182/week @ 2024-06-02 188/week @ 2024-06-09 164/week @ 2024-06-16 101/week @ 2024-06-23 220/week @ 2024-06-30 146/week @ 2024-07-07 322/week @ 2024-07-14 360/week @ 2024-07-21 414/week @ 2024-07-28

1,250 每月下载量
5 个包 (4 个直接使用) 中使用

MIT 许可证

6KB
65

deterministic-hash

这是一个小巧的 Rust 库,用于创建不受架构影响的确定性哈希。该库与 no-std 兼容,不使用任何分配或依赖。

默认的 core::hash::Hasher 实现确保了使用 #[derive(Hash)] 的数据结构的平台依赖哈希。最值得注意的是通过

  • 使用 to_ne_bytes 对于 u{8,16,32,64,128}
  • 使用 usize 的本地字节数。

该库的 DeterministicHasher 强制使用 to_le_bytes 并将 usize 强制转换为 u64,无论您的平台如何。因此,哈希器将效率较低,但在不同架构环境中使用同一库时将是确定的。我在 ARM 嵌入式系统、wasm 和 x64 上都使用了一个常见的数据协议库。

您可以通过运行 cross 来验证此库的操作

cargo install cross
cross test --target=x86_64-unknown-linux-gnu
cross test --target=aarch64-unknown-linux-gnu
cross test --target=arm-unknown-linux-gnueabihf

lib.rs:

这是一个小巧的 Rust 库,用于创建不受架构影响的确定性哈希。该库与 no-std 兼容,不使用任何分配或依赖。

默认的 core::hash::Hasher 实现确保了使用 #[derive(Hash)] 的数据结构的平台依赖哈希。最值得注意的是通过

  • 使用 to_ne_bytes 对于 u{8,16,32,64,128}
  • 使用 usize 的本地字节数。

该库的 DeterministicHasher 强制使用 to_le_bytes 并将 usize 强制转换为 u64,无论您的平台如何。因此,哈希器将效率较低,但在不同架构环境中使用同一库时将是确定的。我在 ARM 嵌入式系统、wasm 和 x64 上都使用了一个常见的数据协议库。

从任何哈希器中通过插入 DeterministicHasher 来使其确定

let hasher = crc::crc32::Digest::new(crc::crc32::KOOPMAN);
let hasher = deterministic_hash::DeterministicHasher::new(hasher);

无运行时依赖