应用程序商店中有一个名为active photo的应用程序(http://itunes.apple.com/us/app/active-photo/id366798464?mt=8)允许您嵌入隐藏的图像或.exe文件内部的图像。我想知道如何将图像添加到图像中,有点像原始图像中的子图像。
我一直在研究元数据,但没有标签似乎足以容纳第二张图片的NSData表示。
如何通过嵌入或元数据向图像添加任何类型的文件,以便通过电子邮件和/或短信发送图像并保留数据?
谢谢。
答案 0 :(得分:2)
这称为steganography。
我认为将文件隐藏在JPEG图像中的最简单方法就是改变其像素数据,使得压缩不会损坏它,但是足够精细以至于拦截器无法检测隐藏的数据
答案 1 :(得分:0)
我不认为使用JPEG是可能的,因为它是有损压缩,因此您最终会破坏嵌入式文件。但是PNG使用类似于Deflate的压缩方法,这是无用的。
我已经开始编写这样的程序了。我们的想法是通过将数据分成像素的最低有效位来隐藏数据字节。色彩通道。让我举一些例子。
RGB-8图像表示具有3个字节的像素,一个用于红色,一个用于绿色,一个用于蓝色。我将3位存储到红色通道中,将2位存储为绿色(人眼对绿色更敏感),将3存储为蓝色。所以我每个像素嵌入一个字节。与RGBA-8图像类似,我做2-2-2-2。这当然涉及一些按位操作。
RGB(A)-16图像变得更有趣,每个通道有两个字节。我使用每个通道的整个最低有效字节具有最小的失真(最坏情况255/65535 = ~3.9%)并且每个像素存储多达3或4个字节的数据。不错!! 此外,在这种情况下没有复杂的按位操作,单个分配可以完成这项工作。
它有很多改进。我想要问用户一个密码,哈希并播种一个安全的伪随机数生成器,然后不再逐个像素地移动,而是要求生成器提供一个新的随机索引。
这种解决方案的缺点是已经嵌入的数据越多,它就越慢,因为生成器将提供越来越多的占用索引。但以这种方式更加安全。为了使它更安全,我想在未触摸的像素中引入噪声数据,以隐藏真实数据的位置。
正如您所看到的,您可以使用PNG图像做很多事情!如果您有兴趣,我可以提供我迄今为止所写的代码。