4 个版本 (破坏性更新)
0.6.0 | 2023 年 4 月 4 日 |
---|---|
0.5.0 | 2021 年 7 月 31 日 |
0.4.0 | 2020 年 3 月 8 日 |
0.3.0 | 2020 年 3 月 8 日 |
0.1.1 |
|
#518 in 文件系统
每月 487 次下载
用于 8 个 crates (5 个直接使用)
16KB
297 行代码(不包括注释)
递归文件系统摘要
此库实现了一个简单但高效的递归文件系统摘要算法。您有一个包含一些内容的目录,并希望获取其内容的加密摘要(哈希)。
它最初是为了在 crev
中计算源代码包的校验和而创建的,但它具有通用性,可用于任何其他目的。
算法
给定任何摘要算法 H
(哈希函数算法),一个 RecursiveDigest(H, path)
是
- 对于文件:
H("F" || file_content)
- 对于符号链接:
H("L" || symlink_content)
- 对于目录:
H("D" || directory_content)
如您所见,使用一个字母的 ASCII 前缀来确保不可能创建一个与目录等摘要相同的文件。这种方法的一个缺点是,简单文件的 RecursiveDigest(H, path)
与其普通的摘要不同(H(file_content)
)。
file_content
只是一个文件的字节内容。
symlink_content
只是指向符号链接的路径,以字节形式表示。
directory_content
是通过
- 按名称对目录中的所有条目进行排序(升序),使用简单的字节序列比较来创建的
- 对于所有条目连接成对
H(entry_name)
RecursiveDigest(H,entry_path)
如果使用可选的附加数据扩展,上面的H(entry_name)
将变为H(entry_name || 0 || additional data)
。附加数据的格式和意义未指定,但旨在用于文件系统元数据,如文件系统权限和所有权。
依赖关系
~0.7–8.5MB
~69K SLoC