【问题标题】:How can I edit the bytes code of a JPG file preserving still its header and footer? (in Java)如何编辑保留其页眉和页脚的 JPG 文件的字节代码? (在 Java 中)
【发布时间】:2011-11-28 05:02:38
【问题描述】:
我已经使用 Java 成功地将我的隐写术程序编码为 PNG 文件。我的程序在 PNG 和 BMP 文件中运行良好。但是当我尝试在 JPG 文件中运行我的程序时,显示的数据与原始数据不同。当然,每种文件类型的标题都不相同。所以现在我想知道; PNG和JPG文件的数据结构不一样吗?我需要确切地知道如何在不影响其页眉和页脚的情况下操作 JPG 文件的字节。
谢谢。
【问题讨论】:
标签:
java
binary
jpeg
steganography
【解决方案1】:
首先,您需要说明您用于图像隐写术的确切方法,例如将秘密数据隐藏在图像像素的 lsb 中,以二进制格式读取文件等。
如果使用 lsb's 是您的程序,那么我希望以下答案能满足您的查询-
“PNG”和“BMP”实际上是无损文件格式。在创建新图像时处理这些格式的像素位后,不会丢失任何数据。这就是您能够检索所有隐藏数据的原因。
'JPG' 格式使用有损压缩技术,因此隐藏在像素中的数据会丢失。即使我也遇到过这个问题,解决方案存在于处理 transform domain 中的图像。您需要使用 Direct Cosine Transform 方法来实现它。
变换域涉及算法和图像变换的操作,例如离散余弦变换 (DCT) 和小波变换。这些方法可以在图像的更重要区域隐藏信息,还可以操纵图像的属性,如亮度。这些技术比图像域逐位隐写方法更有效。变换域技术可以应用于任何格式的图像。此外,无损和有损格式之间的转换可能会继续存在。
DCT 在隐写术中的工作原理是什么?
图像被分解为 8x8 像素块。 DCT 从左到右、从上到下应用于每个块。量化表对每个块进行压缩以缩放 DCT 系数,并将消息嵌入到缩放后的 DCT 系数中。
这种方法仍然需要大量的研究。我正在研究它的代码,并会尽快发布。
很高兴听到来自其他开发人员的其他方法或不同的有效技术。