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