Bash
兩個據稱相同的 M4A 文件給出了不同的雜湊結果。為什麼?
兩個包含相同歌曲的文件,都是 M4A 格式,在我計算它們的雜湊時輸出兩個不同的結果:
md5sum f149e2d2a232a410fcf61627578c101a new.m4a ad26ed675342f0f45dcb5f9de9d586df old.m4a
它們包含相同數量的字節:
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
exiftool
輸出僅在創建日期上有所不同(pastebin for和new.m4a
pastebin for)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
唯一真正的區別是該
old.m4a
文件是在 2020 年 12 月下載的,並且new.m4a
是幾個小時前下載的。如果需要,您可以
new.m4a
在此處和old.m4a
此處下載。最初,兩者都是從藝術家的 Bandcamp 頁面下載的。PS我的人耳說這兩者是相同的。
列印的元數據
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
(這是在使兩個文件具有相同的文件日期之後 - 如儲存在磁碟上的日期 - 而不是儲存在文件中的肉數據)
創建 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
例如:
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 |___________||___________|
然後通過轉換為日期:
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