4个版本 (2个破坏性版本)
0.3.1 | 2024年2月10日 |
---|---|
0.3.0 | 2022年3月19日 |
0.2.0 | 2022年1月19日 |
0.1.0 | 2021年12月31日 |
在算法中排名265
每月226次下载
用于 2 crates
115KB
521 行
循环多项式
此crate实现了论文第2.3节中给出的哈希算法
Jonathan D. Cohen,n-Gram的递归哈希函数,ACM Trans. Inf. Syst. 15 (3),1997。
来自此论文的其他开源实现通常集中在后续章节中出现的其他算法。
与其他哈希算法相比,此哈希算法具有一些突出的特点
- 该算法支持循环/滚动哈希计算。
- 滚动哈希计算比Adler32快约5倍。
- 哈希值可分解。
循环/滚动
滚动哈希(有时称为循环哈希),可以从先前的哈希值和数据的微小变化中计算新的哈希值。滚动哈希对于在数据集合上滑动窗口数据非常有用
这比为每个块重新计算哈希值要快得多。
滚动哈希是找到具有给定哈希值的块的效率方法。
可分解
可分解哈希,可以计算一个数据块的哈希值,给定一个更大数据块的哈希值和剩余数据的哈希值
在上面的例子中,哈希 $h_3
$ 可以从哈希 $h_1
$ 和 $h_2
$ 中计算出来。
其他算法
Adler32哈希/校验和算法可以用作滚动哈希,并由zlib库和rsync工具推广。
性能
在笔记本电脑上进行了性能比较,与adler32 crate进行了比较。要运行此比较,请执行cargo bench
。
单个块
在计算单个块时,循环多项式哈希比Adler32慢。
算法 | MB/sec |
---|---|
循环多项式32位 | 2127 |
循环多项式64位 | 2126 |
Adler32 | 2562 |
滚动
滚动哈希的计算比Adler32快。
算法 | MB/sec |
---|---|
循环多项式32位 | 1254 |
循环多项式64位 | 1048 |
Adler32 | 170 |
冲突
要计算随机数据的哈希冲突,请执行
cargo run --example collisions
这将输出冲突数。
算法 | 冲突 |
---|---|
随机数生成器 | 118 |
循环多项式32位 | 140 |
Adler32 | 2872 |
货物特性
std
默认情况下,这个crate使用启用特征 std
的Rust标准库。如果作为没有默认特征的依赖项包含,crate支持no_std
,例如。
cyclic-poly-23 = { version = "xxx", default-features = false }