当我复制文件时,文件的 MD5SUM 是否会改变?
例子:
$ md5sum file01.dmp
$ cp file01.dmp file02.dmp
$ md5sum file02.dmp
两个 MD5SUM 不应该匹配吗?
答案1
md5sum
(sha1sum
等等sha256sum
)计算文件内容的哈希值。这不包括文件名或任何其他元数据(例如修改时间)。如果两个文件具有相同的内容,则将md5sum
为每个文件生成相同的哈希值。 (请注意,输出md5sum
由哈希值和文件名组成。如果重命名文件,哈希值不会改变,但输出的文件名部分当然会改变。)
生成不同哈希值的两个文件始终具有不同的内容。如果复制的文件生成不同的哈希值,则说明复制以某种方式失败,或者其中一个文件在复制后被修改。
然而,它是不是生成相同哈希值的两个文件必然具有相同的内容。由于哈希值是固定大小的,因此大量不同的文件都会生成相同的哈希值。这就是所谓的碰撞。但发现碰撞本不应该是一件容易的事。 (不过,这是针对 MD5 的,这就是为什么它不再被认为是安全的。MD5 对于检测意外文件损坏仍然足够好,只是不能检测恶意修改。)
答案2
md5sum 输出将会更改,因为它在最后一个字段中报告文件名本身。要剥离文件名以便仅输出哈希本身,请使用awk
或cut
:
md5sum filename | cut -d ' ' -f1