【问题标题】:How does one embed a file inside of an image? iOS iPhone如何在图像中嵌入文件?苹果手机
【发布时间】:2011-07-02 21:04:44
【问题描述】:

应用商店中有一个名为 active photo (http://itunes.apple.com/us/app/active-photo/id366798464?mt=8) 的应用,可让您嵌入隐藏图像或 .exe图像内的文件。我想知道如何将图像重新添加到图像中,有点像原始图像中的子图像。

我一直在研究元数据,但似乎没有标签大到足以容纳第二张图片的 NSData 表示。

如何通过嵌入或元数据向图像添加任何类型的文件,以允许通过电子邮件和/或文本消息发送图像并仍保留数据?

谢谢。

【问题讨论】:

    标签: iphone xcode image file metadata


    【解决方案1】:

    这被称为steganography

    我想将文件隐藏在 JPEG 图像中的最简单方法就是更改其像素数据,使压缩不会损坏它,但又足够微妙,以至于拦截器无法检测到隐藏的数据.

    【讨论】:

    • 根据那篇文章,似乎当您以这种方式修改图像代码时,当通过电子邮件等发送数据时,数据会丢失。我尝试这样做的方式,在我以前的一个问题,是将图像转换为 NSData,使用分隔符字符串将第二个图像附加到 NSData 中,然后保存它。这在我的设备上工作,我能够阅读这两张图片,直到我通过电子邮件发送或发短信给他们。电子邮件和短信删除了我添加的数据,只剩下原始图像。任何想法如何解决这个问题?
    • 附加第二个图像不起作用,因为图像格式中没有定义添加,任何转换都会忽略它或阻塞它。对于某些图像格式,您可以嵌入“信息”数据(例如 cmets 字段 JPG)。否则,您需要使用某种隐写术。
    • @SolidSnake4444 在这种情况下,我想到的唯一想法是它们不会将图像本身存储在另一个图像中,而是将秘​​密图像的位置或标识符存储在设备上(然后隐藏秘密图像以某种形式在设备本身上)。然后将图像发送到其他系统确实不携带秘密图像。当然,这并不排除隐写术。
    • 是否可以创建自定义元数据标签,因为这样我可以创建一个没有字符限制的标签,然后用第二张图片的 NSData 填充它。
    【解决方案2】:

    我认为 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 图像做很多事情!如果你有兴趣我可以给出我目前写的代码。

    【讨论】:

    • 我有兴趣看到这个。如果要通过电子邮件/短信/短信发送图片,这种情况会持续吗?
    • 如果图像未明确转换为其他格式,您的数据将永久保留。所以是的,它可以通过电子邮件发送,甚至可以发布在网页上。给我发一封电子邮件到你在我的个人资料中找到的地址,在接下来的几天里我会给你发 C 源:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多