6

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

$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 或图像查看应用程序是否对此施加了限制。

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

4

3 回答 3

7

你应该看看隐写术。请注意,您并没有将数据隐藏在图像中。任何可以使用文本编辑器打开图像的人都会在文件中的某处看到您的文本(在这种情况下,最后会更糟)。如果我是你,我会做以下事情:

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

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

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

于 2013-10-10T22:09:34.133 回答
1

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

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

为了使它更安全使用编码,所以使用你自己的地图来编码 ascii,就像@fvdalcin 建议的那样。

于 2013-10-10T22:06:36.617 回答