了解 Mp3 文件结构

Posted

技术标签:

【中文标题】了解 Mp3 文件结构【英文标题】:Understanding Mp3 file structure 【发布时间】:2015-12-25 03:40:03 【问题描述】:

我正在开发一个 mp3 隐写术项目,我想通过定期操作最低有效位 (LSB) 来对 mp3 文件中的文本进行编码。我想在不对音频进行任何重大更改的情况下对该文本进行编码。根据此链接http://www.datavoyage.com/mpgscript/mpeghdr.htm,有 mp3 标头,其中包含前导 mp3 块的信息。所以我想要一个关于如何使这成为可能的指导?

【问题讨论】:

欢迎来到 Stack Overflow。就目前而言,您的问题非常广泛且开放。如果您更详细地描述认为应该如何解决问题,那么您可能会更幸运地得到一个明确的答案。 【参考方案1】:

Mp3 文件由“帧”序列组成(播放 4 分钟的 mp3 文件大约有 11000 帧)。在每个 MP3 文件的前面和末尾有两个信息字段(Id3 Tag v1, v2)包含有关 Mp3 文件的信息 - 这两个字段是可选的,可以存在或不存在,对 Mp3 文件的质量没有任何影响。您不应该在此处隐藏 staga-message,因为它们很容易被找到。帧由帧头(32 位)和帧体(包含压缩声音)组成。根据您的问题,隐写术会影响帧头(32位),所以我将专注于帧头!

由于它们的功能,在 32 位帧头中仍然存在一些“不重要的位”(阅读有关其功能的更多详细信息)。简而言之,您可以使用以下索引中的位:24、27、28、29、30、31、32(使用位 27 和 28 对音质的影响很小)在此链接中此图片中的索引:@987654321 @。

所以这取决于您是否只需要每帧 5 位或每帧 7 位。由于我的工作(理论和源代码测试),7 位是您可以在每帧上使用的最大位数,但其他人可以找到更大的位!

为了访问每一帧的字节数组,您可以编写自己的类,但互联网上有许多免费可用的类 - Mark Heath 的 NAudio.dll -(由于论坛法律,我无法发布链接,您可以搜索谷歌) - 是一个有用的。

在访问了每一帧的字节数组后,您可以在 Mp3 文件中/从 Mp3 文件中嵌入/提取数据。注意:每帧字节数组的前32位是Frame Header,所以可以很容易的识别出不重要位的精确索引!

我最近完成了关于这个主题的最后一年的论文(图像隐写术 -LSB、奇偶校验编码和 MP3 - 未使用的位标头)。我论文中的以下源代码(用 C# 编写)是一个可运行的隐写术程序。希望对你有帮助:http://www.mediafire.com/download/aggg33i5ydvgrpg/ThesisSteganography%2850900483%29.rar

Ps:我是越南人,所以我的句子中可能存在一些错误!

【讨论】:

以上是关于了解 Mp3 文件结构的主要内容,如果未能解决你的问题,请参考以下文章

使用 JAVA 加密和乱码音频文件

MP3文件格式分析

MP3文件格式分析

MP3 Fuzz学习

MP3 文件格式解析

MP3 信息读取