用php隐藏照片中的秘密


Hiding secrets inside photographs with php

我创建了一个将文本隐藏在照片中的服务。例如:

$img_name = "myimage.jpeg";
$orig_contents = file_get_contents($img_name);
$msg = "My secret.";
$fp = fopen($img_name, "wb"); 
fwrite($fp, $orig_contents . $msg); 
fclose($fp); 

我很好奇:使用这种方法我可以在照片中隐藏多少信息?例如,我可以在图像文件中嵌入小说的章节吗?我已经添加了相当大的文本块而不会损坏图像,但我想知道 PHP 或图像查看应用程序是否对此施加了限制。

(附言我知道这种类型的隐写术是不安全的;我这样做只是为了好玩。

你应该看看隐写术。请注意,您不会在图像中隐藏数据。任何可以使用文本编辑器打开图像的人都会在文件中的某个位置看到您的文本(在这种情况下,最终,情况要糟糕得多(。如果我是你,我会做以下事情:

  1. 使用一些体面的算法和密钥加密您的数据
  2. 创建一个函数,以随机方式通过文件分发数据,以便任何人都会注意到您正在尝试在其中放置一些秘密(请注意,您必须在之后恢复它(。在常规位图图像中,您可以使用每个像素的最后一位来保存信息,因为如果将原始图像与具有隐藏数据的图像进行比较,则人眼不会感知到它所做的更改。
  3. 祈祷国家安全局没有读这篇文章,否则你可能会遇到一些严重的麻烦:)

不,PHP 或 JPEG 格式基本上没有限制使用此方法可以添加到图像中的数据量。 这是有效的,因为 JPEG 格式将所有图像数据存储在文件的开头,直到某个标记。 例如,在标记之后,假定任何数据都是其他内容,例如缩略图。

一个很酷的技巧(也适用于 GIF 图像(是您可以将 ZIP 文件附加到图像的末尾,该文件同时用作 JPEG 和 ZIP 文件。 只需更改文件扩展名,图像处理程序或ZIP程序都可以读取它。

我认为这不是最安全的方法,如果您真的想将字符串隐藏到图像中,您可能会使用特定的模式每 10 个像素更改一个像素,这个想法很简单将您的图像转换为整数数组,遍历数组,每 10 个像素将值更改为 ascii 字符数。

每 10 个像素更改 1 个不会产生很大的噪音。

为了更安全地使用编码,因此请使用您自己的映射来编码 ascii,就像@fvdalcin建议的那样。