深入解析图像隐写术:如何通过像素隐藏信息并确保数据安全
隐写术是一门研究隐藏信息的学科。通过它,能够做到只有发送者和接收者知晓隐藏的信息。

图像隐写术主要研究如何将数据隐藏在图像当中。利用这种技术,能够避免无关的用户察觉到那些被隐藏起来的信息或者数据。
相关的原理
图像由很小的点构成,这些点即为像素。每个像素都由三个字节来进行表示,其中一个字节代表红,一个字节代表绿,一个字节代表蓝。这三种颜色的组合会决定像素的实际颜色。
红色:
二进制:11001001
十进制:201
绿色:
二进制:11111000
十进制:248(原文此处为201,实际应为248)
蓝色:
二进制:00000011
十进制:3
这一组合呈现的像素颜色是橙色。
图像隐写的基本原理在于,修改 LSB(最不重要的那一 bit)不会被人眼所察觉。正因如此,我们会修改 RGB 的 LSB 值,以此来存储隐藏信息,并且在这个过程中不会对图像的颜色产生影响。
在这个例子里,我们只是对蓝色的 LSB 进行修改。然而,如果我们愿意的话,是能够修改所有红色、绿色和蓝色的成分的。但仅仅修改蓝色的 LSB 的话,我们能够隐藏的信息就会少一些。我们也可以把要隐藏信息的长度存储到图像中,只是本教程中尚未进行这一操作。
假设我们现在要将1101藏到图片中。
我们首先要获取图片中每个像素的 RGB 值。因为要隐藏 4bit 的数据,并且需要修改蓝色部分,所以需要 4 个像素。
假设图片前4个像素的RGB值如下:
11001100 10010001 00101011
00011000 11110000 11111110
11100010 00100101 01010101
11111101 00001010 01000011
现在,我们将这4个RGB值最后的bit替换成1101,
现在新的RGB值变成了:
11001100 10010001 00101011
00011000 11110000 11111111
11100010 00100101 01010100
11111101 00001010 01000011
加粗的最后一bit,就是我们要隐藏到图片的信息。
现在把新的 RGB 值应用到像素上。由于人眼不会注意到这种改变,所以图片看起来依然是一样的。
加密的部分到此刻已经完成了。接下来,我们要进行的是解密那些隐藏在图片之中的信息。
我们要达到这一点,就需要先取出每个像素的 RGB 值,接着再合并 LSB,从而得到我们隐藏的信息。
用PHP实现
我们需要一张图片和3个php脚本来实现基本的图像隐写。
encrypt.php
decrypt.php