#目录树 #哈希树 #树哈希 #哈希 # #文件树 #校验和

merkle_hash

在目录树中找到所有文件和目录的哈希值

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

Download history 178/week @ 2024-04-27 323/week @ 2024-05-04 178/week @ 2024-05-11 315/week @ 2024-05-18 217/week @ 2024-05-25 232/week @ 2024-06-01 150/week @ 2024-06-08 276/week @ 2024-06-15 416/week @ 2024-06-22 396/week @ 2024-06-29 438/week @ 2024-07-06 525/week @ 2024-07-13 372/week @ 2024-07-20 738/week @ 2024-07-27 633/week @ 2024-08-03 568/week @ 2024-08-10

2,403 每月下载量
8 crates 中使用

MIT 许可证

27KB
519

merkle_hash

在目录树中找到所有文件和目录的哈希值。

用法

要使用此 crate,请将 merkle_hash 添加为项目 Cargo.toml 中的依赖项

[dependencies]
merkle_hash = "3.7"

功能

  • 轻松找到目录树的主哈希值。
  • 提供多种哈希算法。
  • 允许在哈希过程中包含名称。
  • 使用 Merkle 树算法计算目录的哈希值。
  • 外部遍历文件和目录的路径和哈希值。

限制

  • 当前仅支持 UTF-8 路径,如果路径不是 UTF-8 编码,则将失败。

可选

  • sha - 添加此 cargo 功能以包含 SHA-256SHA-512 作为哈希算法。
  • parallel - 默认启用,此功能使 crate 利用所有可用的线程。
  • encode - 默认启用,此功能添加 bytes_to_hexto_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 的任何补丁版本将仅包含错误修复,没有破坏性更改。

使用技术

  • 用于多线程目录读取和哈希的rayon
  • 使用camino确保路径始终是UTF-8格式。
  • 使用blake3对文件内容进行blake3哈希。
  • 使用sha2对文件内容进行sha256和sha512哈希。

许可证

MIT许可证下授权。

依赖项

~1.4–2MB
~48K SLoC