我想以编程方式创建音频文件(MP3、Ogg Vorbis、Flac)的 SHA1 校验和。要求是即使标头(例如 ID3)发生变化,校验和也应该是稳定的。
注意:音频文件没有 CRC
这是我现在尝试的:
1) 使用 Perl 和MPEG::Audio::Frame读取 + 散列所有 MPEG 帧
my $sha1 = Digest::SHA1->new;
while (my $frame = MPEG::Audio::Frame->read(\*FH)) {
$sha1->add($frame->content());
}
2) 使用 Python 和libmad (pymad)解码 + 散列所有 MPEG 帧
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 出现一些解码错误的情况下,例如"Huffman data overrun (0x0238)"。由于这确实发生在许多 mp3 文件上,我不确定它是否真的表明文件损坏......</p>