Я хочу программно создать контрольную сумму аудио файлов SHA1 (MP3, Ogg Vorbis, Flac).
Требуется, чтобы контрольная сумма была стабильной , даже если заголовок (например, ID3) изменяется .
Примечание. Аудиофайлы не имеют CRC
Это то, что я попробовал сейчас:
1) Чтение + хеширование всех кадров MPEG с использованием Perl и MPEG :: Audio :: Frame
my $sha1 = Digest::SHA1->new;
while (my $frame = MPEG::Audio::Frame->read(\*FH)) {
$sha1->add($frame->content());
}
2) Декодирование + хеширование всех кадров MPEG с использованием Python и libmad (pymad)
mf = mad.MadFile(path)
sha1 = hashlib.sha1()
while 1:
buf = mf.read()
if (buf is None):
break
sha1.update(buf)
3) Использование mp3cat
> mp3cat - - < file.mp3 | sha1sum
Однако ни один из этих методов не дал стабильную контрольную сумму. А именно, в некоторых случаях контрольная сумма изменялась после переназначения файла с помощью picard .
Есть ли библиотеки, которые уже предоставляют то, что я хочу?
Мне плевать на язык программирования…
Обновление:
Я отладил дело немного дальше.
Несоответствие контрольной суммы libmad, по-видимому, происходит в тех случаях, когда libmad получает некоторые ошибки декодирования, такие как «Переполнение данных Хаффмана (0x0238)» .
Поскольку это действительно происходит во многих mp3-файлах, я не уверен, действительно ли это указывает на испорченный файл ...