17 个稳定版本
3.7.0 | 2024 年 8 月 2 日 |
---|---|
3.6.1 | 2024 年 1 月 27 日 |
3.5.0 | 2023 年 3 月 24 日 |
3.0.1 | 2022 年 11 月 20 日 |
1.1.1 | 2022 年 3 月 31 日 |
#122 在 算法 中
2,403 每月下载量
在 8 crates 中使用
27KB
519 行
merkle_hash
在目录树中找到所有文件和目录的哈希值。
用法
要使用此 crate,请将 merkle_hash
添加为项目 Cargo.toml
中的依赖项
[dependencies]
merkle_hash = "3.7"
功能
- 轻松找到目录树的主哈希值。
- 提供多种哈希算法。
- 允许在哈希过程中包含名称。
- 使用 Merkle 树算法计算目录的哈希值。
- 外部遍历文件和目录的路径和哈希值。
限制
- 当前仅支持 UTF-8 路径,如果路径不是 UTF-8 编码,则将失败。
可选
sha
- 添加此 cargo 功能以包含SHA-256
和SHA-512
作为哈希算法。parallel
- 默认启用,此功能使 crate 利用所有可用的线程。encode
- 默认启用,此功能添加bytes_to_hex
和to_hex_string
函数。retain
- 默认禁用,此功能在遍历目录时复制目录的子路径。
示例
获取目录树的主哈希值
use merkle_hash::{Algorithm, MerkleTree};
let tree = MerkleTree::builder("/path/to/directory")
.algorithm(Algorithm::Blake3)
.hash_names(false)
.build()?;
let master_hash = tree.root.item.hash;
遍历目录树,获取每个文件和目录的哈希值
use merkle_hash::{Encodable, MerkleTree};
let tree = MerkleTree::builder("/path/to/directory").build()?;
for item in tree {
println!("{}: {}", item.path.relative, item.hash.to_hex_string());
}
将树折叠成任何线性集合
use std::collections::BTreeSet;
use merkle_hash::{MerkleItem, MerkleTree};
let tree = MerkleTree::builder("/path/to/directory").build()?;
let btree_set: BTreeSet<MerkleItem> = tree.into_iter().collect();
3.7 版本的发行说明
- 移除了对 anyhow 的依赖。
- 使用自定义
IndexingError
类型进行更好的错误处理。
版本控制
- 此 crate 的任何主要版本都可能包含哈希算法的更改。
- 此 crate 的任何次要版本都可能包含对 API 的破坏性更改。
- 此 crate 的任何补丁版本将仅包含错误修复,没有破坏性更改。
使用技术
许可证
在MIT许可证下授权。
依赖项
~1.4–2MB
~48K SLoC