我正在阅读一篇解释How to Hide Files in JPEG Pictures的文章。
我想知道文件如何包含jpeg数据和rar文件,对图像或压缩文件没有任何可见的失真。
我的猜测是它与压缩文件或jpeg文件以二进制形式表示的方式有关,但我不知道它是如何工作的。
有人可以详细说明吗?
答案 0 :(得分:10)
所做的只是将存档添加到JPEG流的末尾。然后,您希望您的JPEG解码器不会读取EOI标记,在那里查找数据,并说出错误。
JPEG图像是以SOI标记开头并以EOI标记结束的字节流。
ZIP和RAR是字节流。 ZIP流以50 4B开头。 RAR流以52 61 72 21 1A 07开始。
上面链接中描述的方法采用(多个)JPEG流的二进制副本,并向其附加ZIP或RAR流。
RAR / ZIP解码器扫描流,直到找到RAR或ZIP的签名(忽略JPEG流)。
答案 1 :(得分:3)
这个答案没有解决你给出的链接中的确切情况,但它提供了另一种隐藏数据的方法:
理论上也可以在JPEG图片本身中隐藏文件,但是您需要一个复杂的程序来编写编码数据然后再次读取它。
基本上,JPEG照片包含大量信息,如果这些信息发生变化,人眼就不会注意到这些信息。想象一下,你有一张蓝色衬衫的人的照片。如果你放大那件衬衫,你会发现它不是一种均匀的蓝色,而是由多种颜色的斑点组成,其中大部分是蓝色调(但有些也可能是其他颜色)。您可以轻松地将这些斑点中的一些变为略微不同的色调,这样就不会对图片产生明显的明显差异。
聪明的程序可以通过巧妙地将像素更改为表示数据的模式,在照片中嵌入代码。一个非常简单的例子:如果" hue" (即色调)由0到255之间的数字表示,偶数色调的像素可以表示" 0"奇数色调的位和像素a" 1"位。人眼很难发现图片中的这种差异。
这是一个古老的想法,本文讨论了以这种方式隐藏的数据量:High capacity data hiding in JPEG-compressed images (2004)
答案 2 :(得分:1)
通常,将文件隐藏在另一个文件中是一种称为Steganography的做法。您提供的链接中描述的方法只需使用.rar
运算符将.jpg
连接到+
的末尾,并利用每种文件类型的不同标头。 @ user3344003非常出色地解释了为什么它在his/her answer中有效。这不会使图像失真,因为图像数据保持不变。
在图像中隐藏文件的另一种常用方法是使用每个字节的最低有效位(LSB)。执行此操作的方法是将图像比特流中的每个第8位替换为要隐藏的文件的下一位。这是有效的,因为图像的颜色可以稍微扭曲而不易被人眼察觉。在这种方法中,磁盘上的图像大小不会像链接中的方法那样增长。这使得隐藏文件的证据更难以检测。有关此和其他隐写方法的详细信息,请参阅this paper by Bret Dunbar。
答案 3 :(得分:0)
我用matlab实现了一个简单的算法。如果你将图像划分为8位。最重要的位具有最有价值的信息,您可以删除位0和位1而不对原始图像进行任何更改。所以你可以把你的文件而不是0和1位。我在anil.k.jain书中看到了这个算法。