用php隐藏照片里面的秘密

时间:2013-10-10 21:51:58

标签: php image security steganography

我创建了一项隐藏照片内文字的服务。例如:

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

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

3 个答案:

答案 0 :(得分:7)

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

  1. 使用某些decent Algorithm
  2. 加密您的数据
  3. 创建一个以 - 随机方式通过文件分发数据的功能,这样任何人都会注意到你正试图在其中加入一些秘密(请注意你必须恢复之后)。在常规位图图像中,您可以使用每个像素的最后一位来保存您的信息,因为如果您将原始图像与具有隐藏数据的图像进行比较,则人眼不会察觉到它所做的更改。
  4. 祈祷NSA不读这个,否则你会遇到一些严重的麻烦:)

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

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

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

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