JPEG 隐写术

3
我正在进行一个Java Steganography项目,将.txt消息隐藏在JPEG图像中。大致上,有四个步骤:
1.将每个像素块转换为8x8的DCT系数。
2.使用一些复杂的计算量化每个块。
3.嵌入/替换每个块系数的LSB位中的消息比特。
4.嵌入后,执行反向DCT以重新创建带有嵌入消息的JPEG图像。
我卡在第3步,因为我不确定如何记录我已经用消息改变了哪些系数,以便将其提取出来?
有人可以推荐什么方法可以嵌入每个系数,并记录每个嵌入,以便提取它回来吗?
这将非常感激。
(我也知道应该保留1和0以及DC值)。

关于这一步骤,你对其中的问题并不清楚。提取过程是嵌入过程的逆过程,这一点是被假定已知的。举个例子,如果你安排了在第三和第五个系数中进行嵌入,那么你就需要在这两个位置上寻找来提取信息。 - Reti43
可以做到。我只需要修改每个系数(不包括1、0或直流分量),对每个块进行修改,直到消息结束(没有更多的位可嵌入)。所以当我尝试提取每个系数的最低有效位时,它会试图将所有位一起转换回ASCII码(这似乎是不正确的)。另外,你的想法是什么,如果第三个或第五个系数是1或0呢?我如何告诉它不要提取它们,因为它们是1或0呢?这就是我的问题。 - Douglas Grealis
当然,在读取任何最低有效位之前,您可以使用 if 语句检查系数。如果系数为1或0,则简单地忽略它并继续进行。自然地,这适用于嵌入和提取过程。 - Reti43
1个回答

0
你在穿越封面时选择了一条随机路径并跟随它 - 你使用一个密钥作为种子,随机排列数组的索引。
嵌入DCT领域中的1和0存在一个经过深入研究的问题。最终的解决方案似乎是使用湿纸码(WPC)的nsF5隐写嵌入。
作者的Matlab中的nsF5实现对你没有帮助,因为它只是模拟,并不包含WPC。但它帮助我理解了nsF5的工作原理。
WPC允许将消息位分散在一块封面元素中,以便其中一些封面元素是“湿的”(更改成本较高)。存在着WPC的实现,比如Daniel Lerch的Python中的stegolab。如果你想深入了解WPC,甚至能够实现它,你将需要阅读相关的研究论文。
文献参考

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接