如何在图像位中设置标志以标记音频文件的结尾

How to set a flag in image bits to mark the end of an audio file

本文关键字:音频 文件 结尾 标志 图像 设置      更新时间:2023-10-16

目前,我正在尝试将波形格式的音频文件隐藏在位图格式的图像中。

我将它们都转换为二进制形式,现在我正在尝试设置某种标志来标记音频文件的末尾,以便当我从图像中提取音频时,我知道在哪里停止。

需要考虑的注意事项 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像素修改方法已损坏,因此试图使它们稍微更安全是没有意义的。相反,只需担心使用弄脏双手的方法并学习一些隐写术。