如何通过哈希值比较文件的各个部分?

如何通过哈希值比较文件的各个部分?

我有一个文件下载成功,但另一个文件下载失败(只有一个大文件的前 100 MB),我怀疑它们是同一个文件。

为了验证这一点,我想检查它们的哈希值,但由于我只有未成功下载的文件的一部分,所以我只想对前几兆字节进行哈希处理。

我该怎么做呢?

操作系统是 Windows,但我安装了 cygwin 和 MinGW。

答案1

当您将一个文件与多个文件进行比较,或者将多个文件相互比较时,创建哈希值来比较文件是有意义的。

仅比较两个文件一次是没有意义的:计算哈希值的工作量至少与浏览文件并直接比较它们一样高。

一个有效的文件比较工具是cmp

cmp --bytes $((100 * 1024 * 1024)) file1 file2 && echo "File fragments are identical"

您还可以将其与dd比较两个文件的任意部分(不一定从开头)结合使用,例如:

cmp \
    <(dd if=file1 bs=100M count=1 skip=1 2>/dev/null) \
    <(dd if=file2 bs=100M count=1 skip=1 2>/dev/null) \
&& echo "File fragments are identical"

答案2

抱歉,我无法尝试,但这种方法可行

dd if=yourfile.zip of=first100mb1.dat bs=100M count=1
dd if=yourotherfile.zip of=first100mb2.dat bs=100M count=1

这将获得两个文件的前 100 兆字节。

现在获取哈希值:

sha256sum first100mb1.dat && sha256sum first100mb2.dat 

您也可以直接运行它:

dd if=yourfile.zip bs=100M count=1 | sha256sum 
dd if=yourotherfile.zip bs=100M count=1 | sha256sum 

答案3

似乎每个人都采用 Unix/Linux 路线,但只需使用 Windows 标准命令就可以轻松比较两个文件:
FC /B file file2

FC 存在于每个 Windows NT 版本中。而且(如果我没记错的话)也存在于 DOS 中。
它有点慢,但对于一次性使用来说这并不重要。

答案4

我知道上面说的是 Bash,但 OP 也说他们有 Windows。对于任何想要/需要 Windows 解决方案的人,有一个名为 HxD 的程序,它是一个十六进制编辑器,可以比较两个文件。如果文件大小不同,它会判断可用部分是否相同。如果需要,它能够对当前选择的任何内容运行校验和。它是免费的,可以从以下位置下载:HxD 网站。我与作者没有任何关系,我只是使用它多年了。

相关内容