Igo*_* V. 3 bash hashsum files checksum integrity
两个包含相同歌曲的文件,都是 M4A 格式,当我计算它们的哈希时输出两个不同的结果:
md5sum
f149e2d2a232a410fcf61627578c101a new.m4a
ad26ed675342f0f45dcb5f9de9d586df old.m4a
Run Code Online (Sandbox Code Playgroud)
它们包含相同数量的字节:
ls -l
-rw-rw-r-- 1 cdc cdc 2978666 Jun 26 19:49 new.m4a
-rwxrwxr-x 1 cdc cdc 2978666 Jun 26 19:49 old.m4a
Run Code Online (Sandbox Code Playgroud)
该exiftool输出不同之处仅在创建(日期引擎收录了new.m4a和引擎收录的old.m4a)。
我使用 Audacity 的工具来比较两个文件(通过反转和混合它们,这使它们消除了彼此的相似性),结果是沉默,因为没有留下任何东西,这意味着两个文件之间没有区别。
命令cmp给我:
cmp -l
54 375 23
55 51 305
56 41 112
58 375 23
59 51 305
60 45 116
170 375 23
171 51 305
172 41 112
174 375 23
175 51 305
176 41 112
270 375 23
271 51 305
272 41 112
274 375 23
275 51 305
276 41 112
cmp -b
new.m4a old.m4a differ: byte 54, line 1 is 375 M-} 23 ^S
Run Code Online (Sandbox Code Playgroud)
唯一真正的区别是该old.m4a文件是在 2020 年 12 月下载的,并且new.m4a是在几个小时前下载的。
如果需要,您可以new.m4a 在此处和old.m4a 此处下载。最初,两者都是从艺术家的 Bandcamp 页面下载的。
PS我的人耳说这两个是相同的。
ibu*_*fen 13
打印的元数据exiftool是文件数据的一部分。IE:
$ diff <(exiftool old.m4a) <(exiftool new.m4a)
2c2
< File Name : old.m4a
---
> File Name : new.m4a
18,19c18,19
< Create Date : 2020:12:31 18:13:30
< Modify Date : 2020:12:31 18:13:34
---
> Create Date : 2021:06:26 18:57:37
> Modify Date : 2021:06:26 18:57:41
32,33c32,33
< Track Create Date : 2020:12:31 18:13:30
< Track Modify Date : 2020:12:31 18:13:30
---
> Track Create Date : 2021:06:26 18:57:37
> Track Modify Date : 2021:06:26 18:57:37
40,41c40,41
< Media Create Date : 2020:12:31 18:13:30
< Media Modify Date : 2020:12:31 18:13:30
---
> Media Create Date : 2021:06:26 18:57:37
> Media Modify Date : 2021:06:26 18:57:37
Run Code Online (Sandbox Code Playgroud)
(这是在使两个文件具有相同的文件日期之后 - 如存储在磁盘上的日期 - 而不是存储在文件中的肉数据)
创建 md5 sum 时,将使用所有数据。由于字节不同,校验和也不同。
那说; 该音频数据是一样的。
除了cmp你可以做一个十六进制转储来查看原始差异。
例如(跳过前 50 个字节,最多 300 个类型 hex ):
$ diff <(od -j 50 -N 300 -t x1 old.m4a) <(od -j 50 -N 300 -t x1 new.m4a)
1c1
< 0000062 00 00 dc 13 c5 4a dc 13 c5 4e 00 00 ac 44 00 71
---
> 0000062 00 00 dc fd 29 21 dc fd 29 25 00 00 ac 44 00 71
8c8
< 0000242 68 64 00 00 00 07 dc 13 c5 4a dc 13 c5 4a 00 00
---
> 0000242 68 64 00 00 00 07 dc fd 29 21 dc fd 29 21 00 00
14,15c14,15
< 0000402 00 20 6d 64 68 64 00 00 00 00 dc 13 c5 4a dc 13
< 0000422 c5 4a 00 00 ac 44 00 71 bc 00 55 c4 00 00 00 00
---
> 0000402 00 20 6d 64 68 64 00 00 00 00 dc fd 29 21 dc fd
> 0000422 29 21 00 00 ac 44 00 71 bc 00 55 c4 00 00 00 00
Run Code Online (Sandbox Code Playgroud)
例如:
OLD: 00 00 dc 13 c5 4a dc 13 c5 4e 00 00 ac 44 00 71
|___________||___________|
---
NEW: 00 00 dc fd 29 21 dc fd 29 25 00 00 ac 44 00 71
|___________||___________|
Run Code Online (Sandbox Code Playgroud)
然后通过转换为日期:
m4a 使用 Apple Mac OS X HFS+ 时间戳(自格林威治标准时间 1904 年 1 月 1 日午夜以来的秒数)。
old:
dc 13 c5 4a => 3692283210 => Thursday, December 31, 2020 18:13:30
dc 13 c5 4e => 3692283214 => Thursday, December 31, 2020 18:13:34
new:
dc fd 29 21 => 3707578657 => Saturday, June 26, 2021 18:57:37
dc fd 29 25 => 3707578661 => Saturday, June 26, 2021 18:57:41
Run Code Online (Sandbox Code Playgroud)