如何在图像位中设置标志以标记音频文件的结尾
How to set a flag in image bits to mark the end of an audio file
目前,我正在尝试将波形格式的音频文件隐藏在位图格式的图像中。
我将它们都转换为二进制形式,现在我试图设置某种标志来标记音频文件的结尾,这样当我从图像中提取音频时,我知道在哪里停止.
注意事项
1:图片为24bit.
2:音频数据为PCM 16位。
3:我使用的是 LSB,因此每个 16 位音频至少需要 5 个像素和第六个像素的一个元素 (5*3 = 15 + 1 =16)。
您不能依赖 end-of-file 标记是正确的,因为所有字节值都可能在您的字节流中。因此,你必须使用header。这必须以明确的方式实现,以便解码器知道在哪里以及如何查看以提取其信息。这简单地转化为在消息的开头使用 header,在这种情况下,将其设置为固定大小会很方便,但不是必需的。
如果你的消息可以超过65536位,那么你的消息大小显然需要16位以上,比如32位。现在,您可能会争辩说,如果您要嵌入一条非常小的消息,那么 32 位消息大小 header 的开头会有太多的零,这样就有些过分了。然而,即使您计划嵌入 1 kB 的数据,额外的 32 位也几乎不会增加任何额外的噪音。
根据 Kerckhoff's principle,您确实应该假设攻击者完全熟悉您的方案,并且如果您以静态方式嵌入消息,他们应该可以直接提取它。相反,您可以使用密码或密钥作为 PRNG 的种子,然后使用它来打乱像素的顺序。例如,让我们分别用数字 1-3 调用第一个像素的 RGB 分量,用 4-6 调用第二个像素的分量。通过生成数组[1, 2, 3, 4, 5, 6]
并打乱它,你可能会得到顺序[4, 3, 2, 6, 5, 1]
。所以,当你嵌入你的秘密(包括消息大小)时,第一位隐藏在第二个像素的红色分量中,第二位隐藏在第一个像素的蓝色分量中,等等。没人能说这是"visible",因为如果没有正确的像素顺序,他们就无法有意义地提取消息。
但是,您必须记住,隐写术是在另一种媒介中隐藏信息的艺术,甚至没有人怀疑它的存在。相比之下,密码学是关于公开传输您的消息,但以只有预期参与者才能知道其内容的方式进行加密。这对隐写术意味着,人们不一定非要提取您的信息才能达到目的。你只是因为你在秘密地试图传输信息而被抓捕,不管它的内容是否可以被读取。你知道 LSB 像素修改方法被破坏了,所以试图让它们稍微更安全一点是没有意义的。相反,只需担心弄脏您的手并学习一些有关隐写术的方法。
目前,我正在尝试将波形格式的音频文件隐藏在位图格式的图像中。
我将它们都转换为二进制形式,现在我试图设置某种标志来标记音频文件的结尾,这样当我从图像中提取音频时,我知道在哪里停止.
注意事项 1:图片为24bit.
2:音频数据为PCM 16位。
3:我使用的是 LSB,因此每个 16 位音频至少需要 5 个像素和第六个像素的一个元素 (5*3 = 15 + 1 =16)。
您不能依赖 end-of-file 标记是正确的,因为所有字节值都可能在您的字节流中。因此,你必须使用header。这必须以明确的方式实现,以便解码器知道在哪里以及如何查看以提取其信息。这简单地转化为在消息的开头使用 header,在这种情况下,将其设置为固定大小会很方便,但不是必需的。
如果你的消息可以超过65536位,那么你的消息大小显然需要16位以上,比如32位。现在,您可能会争辩说,如果您要嵌入一条非常小的消息,那么 32 位消息大小 header 的开头会有太多的零,这样就有些过分了。然而,即使您计划嵌入 1 kB 的数据,额外的 32 位也几乎不会增加任何额外的噪音。
根据 Kerckhoff's principle,您确实应该假设攻击者完全熟悉您的方案,并且如果您以静态方式嵌入消息,他们应该可以直接提取它。相反,您可以使用密码或密钥作为 PRNG 的种子,然后使用它来打乱像素的顺序。例如,让我们分别用数字 1-3 调用第一个像素的 RGB 分量,用 4-6 调用第二个像素的分量。通过生成数组[1, 2, 3, 4, 5, 6]
并打乱它,你可能会得到顺序[4, 3, 2, 6, 5, 1]
。所以,当你嵌入你的秘密(包括消息大小)时,第一位隐藏在第二个像素的红色分量中,第二位隐藏在第一个像素的蓝色分量中,等等。没人能说这是"visible",因为如果没有正确的像素顺序,他们就无法有意义地提取消息。
但是,您必须记住,隐写术是在另一种媒介中隐藏信息的艺术,甚至没有人怀疑它的存在。相比之下,密码学是关于公开传输您的消息,但以只有预期参与者才能知道其内容的方式进行加密。这对隐写术意味着,人们不一定非要提取您的信息才能达到目的。你只是因为你在秘密地试图传输信息而被抓捕,不管它的内容是否可以被读取。你知道 LSB 像素修改方法被破坏了,所以试图让它们稍微更安全一点是没有意义的。相反,只需担心弄脏您的手并学习一些有关隐写术的方法。