Два предположительно одинаковых файла M4A дают разные результаты хэширования. Почему?

Предполагая, что вы знаете, какое устройство вы подключили, по крайней мере, в 14.04 Ubuntu есть команда usb-devices, которую вы можете просмотреть и найти информацию:

$ usb-devices

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480 MxCh= 3
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev=04.04
S:  Manufacturer=Linux 4.4.0-131-generic ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=0000:00:1a.0
C:  #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub

И в первой строке перечислены шина и порт, а также номер устройства, который дает lsusb.

3
27.06.2021, 00:57
1 ответ

Метаданные, напечатанные exiftool, являются частью файла -data. То есть:

$ 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 используются все данные. Так как байты различаются, проверьте -различную сумму.

Это сказано; аудиоданные одинаковы.


Помимо cmpвы можете сделать шестнадцатеричный дамп для просмотра необработанных различий.

Например, (пропустить первые 50 байт, максимум 300 шестнадцатеричных типов):

$ 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+ (количество секунд с полуночи 1 января 1904 года по Гринвичу ).

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
13
28.07.2021, 11:22

Теги

Похожие вопросы