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