file_hasher
一个使用 XXH3 哈希算法对一个或多个文件进行哈希处理的实用工具。
file_hasher 依赖于 xxh3 包。
关于
file_hasher 通过将文件分割成块,使用 XXH3 哈希算法单独哈希每个块,然后将每个哈希值与现有摘要进行按位异或运算 (^) 并返回结果来工作。
[FileHasher] 实用类提供了一个用于哈希单个文件的 [hash] 方法,以及一个用于哈希多个文件的 [smash] 方法,以及它们的同步版本 [hashSync] 和 [smashSync]。
用法
import 'package:file_hasher/file_hasher.dart';
hash & hashSync
[hash] 和 [hashSync] 方法对单个文件的内容进行哈希处理。
[hash] 流式处理文件内容,而 [hashSync] 同步读取文件然后处理文件数据。
final file = File.fromUri(Uri.file('path/to/file'));
// Asynchronously hash the file.
print(await FileHasher.hash(file));
// Synchronously hash the file.
print(FileHasher.hashSync(file));
smash & smashSync
[smash] 和 [smashSync] 方法按照列出的顺序对多个文件的内容进行哈希处理。
[smash] 流式处理文件内容,而 [smashSync] 同步读取文件然后处理文件数据。
final files = <File>[
File.fromUri(Uri.file('path/to/file1')),
File.fromUri(Uri.file('path/to/file2')),
File.fromUri(Uri.file('path/to/file3')),
];
// Asynchronously hash the files.
print(await FileHasher.smash(files));
// Synchronously hash the files.
print(FileHasher.smashSync(files));
文件扩展方法
file_hasher 使用两个方法扩展了 dart:io 包中的 [File] 对象:[xxh3] 和 [xxh3Sync];它们分别调用 [FileHasher] 的 [hash] 和 [hashSync] 方法。
// Asynchronously hash the file.
print(await file.xxh3());
// Synchronously hash the files.
print(file.xxh3Sync());
参数
[FileHasher] 提供的每个方法以及 [File] 扩展方法都有 3 个可选参数:[chunkSize]、[seed] 和 [secret]。
有关详细信息,请参见下文。
final hash = await FileHasher.hash(
file,
chunkSize: 500,
seed: 20220713,
secret: mySecretUint8List,
);
chunkSize
[chunkSize] 设置了哈希处理的每个数据块包含的字节数;更改 [chunkSize] 将导致任何字节数超过 [chunkSize] 的文件的哈希值发生变化。
[chunkSize] 默认为 2500。
seed
可以提供一个 [int] 类型的 [seed] 来随机化哈希函数。
[seed] 默认为 0。
secret
还可以提供一个可选的 [secret],类型为 [Uint8List],用于随机化哈希函数。
如果提供了 [secret],它必须至少有 136 字节。
注意: 根据 XXH3 和 xxh3 包,secret 必须看起来像一堆随机字节,因为 secret 的质量会影响哈希算法的分散性。应避免使用“平凡”或结构化数据,例如重复序列或文本文档。
注意: [Uint8List] 可以从 dart:typed_data 包导入,并可以从 [int] 列表构造。