mp3 - 了解 Mp3 文件结构

标签 mp3 binaryfiles file-format steganography

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

最佳答案

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 对音质的影响很小)在此链接中此图片中的索引:https://en.wikipedia.org/wiki/MP3#/media/File:Mp3filestructure.svg

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

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

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

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

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

关于mp3 - 了解 Mp3 文件结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813803/

相关文章:

linux - 使用md5从目录中删除相同的二进制文件

c++ - 如何将元数据附加到视频的每一帧

PHP 从不同的 mp3 创建 mp3

c++ - 为什么 playSound 在 Windows 上使用 FMOD 实际上不输出任何声音?

Javascript:如何暂停/停止当前播放的音频?

file - 什么是 "[CS Format=A]" header ?

Git pack 文件入口格式

c# - 在 Windows 窗体中的按钮单击事件中播放 mp3 文件

c++ - C++读取大文件

perl - 如何在 Perl 中打开二进制文件,仅更改第一个字节,然后将其写回?