如何在图像位中设置标志以标记音频文件的结尾
How to set a flag in image bits to mark the end of an audio file
目前,我正在尝试将波形格式的音频文件隐藏在位图格式的图像中。
我将它们都转换为二进制形式,现在我正在尝试设置某种标志来标记音频文件的末尾,以便当我从图像中提取音频时,我知道在哪里停止。
需要考虑的注意事项 1:图像是24位。
2:音频数据为PCM 16位。
3:我使用的是 LSB,因此每个 16 位音频至少需要 5 个像素和第六个像素的一个元素 (5*3 = 15 + 1 =16)。
您是正确的,您不能依赖文件结束标记,因为所有字节值都可能在您的字节流中。因此,您必须使用标头。这必须明确地实现,以便解码器知道在哪里以及如何提取其信息。这简单地转化为将标头放在消息的开头,在这种情况下,将其作为固定大小会很方便(尽管不是必需的)。
如果消息的长度可以超过 65536 位,则消息大小显然需要超过 16 位,例如 32 位。现在,您可能会争辩说,如果您要嵌入一条非常小的消息,那么 32 位消息大小的标头在开头会有太多的零,这将是矫枉过正的。但是,即使您计划嵌入 1 kB 的数据,额外的 32 位也几乎不会增加任何额外的噪声。
根据 Kerckhoff 的原则,您确实应该假设攻击者完全熟悉您的方案,如果您以静态方式嵌入您的消息,他们应该可以直接提取它。相反,您可以使用密码或密钥作为 PRNG 的种子,然后使用它来打乱像素的顺序。例如,让我们分别用数字 1-3 来称呼第一个像素的 RGB 分量,用数字 4-6 来称呼第二个像素的分量。通过生成数组[1, 2, 3, 4, 5, 6]
并对其进行洗牌,您可以获得[4, 3, 2, 6, 5, 1]
的订单。因此,当您嵌入密钥(包括消息大小)时,第一位隐藏在第二个像素的红色分量中,第二位隐藏在第一个像素的蓝色分量中,依此类推。没有人可以说这是"可见的",因为如果没有正确的像素顺序,他们就无法有意义地提取消息。
但是,您必须记住,隐写术是将信息隐藏在另一种媒介中的艺术,甚至没有人怀疑它的存在。相比之下,密码学是关于公开传输您的消息,但加密的方式只有预期的参与者才能知道其内容。这对隐写术意味着,人们不一定要提取你的信息来破坏它的目的。你只是因为你秘密地试图传输信息,不管它的内容是否可以被读取。您知道LSB像素修改方法已损坏,因此试图使它们稍微更安全是没有意义的。相反,只需担心使用弄脏双手的方法并学习一些隐写术。
- FFMpeg库:如何在音频文件中精确查找
- C++新手,想知道如何使用VS code 2019播放音频文件
- QTCPSocket(Qt-C++)中的音频文件逐字节传输
- 音频插件.将 MIDI 映射到音频文件
- 如何在图像位中设置标志以标记音频文件的结尾
- 实时更改音频文件的速度
- 正在读取 RAW 音频文件
- 是否可以使用带有random_shuffle的矢量随机播放音频文件
- 如何使用QT或Linux上的任何其他CPP框架播放WMA音频文件
- SFML不加载音频文件
- 无法使用 PlaySound 在 C++ 中播放音频文件
- 如何合并(混合)两个立体声MP3音频文件
- 需要一个音频分析库来从音频文件中创建实时反馈
- openAL c++ 库来比较两个音频文件
- 如何根据不同的扬声器分开音频文件
- 用于读取音频文件的库
- 在C++和QT中播放WAV音频文件
- 使用 C++ 在 Linux 中播放.mp3或其他音频文件
- 在Windows 7上使用Windows Media Foundation将原始音频文件转换为AAC
- 读取C++音频文件