引言

先看下面这张图像:

870308089_result.png
870308089_result.png

这张看似“纯黑色”的图像中其实隐藏了一份完整版的 GPL V3 协议的中文译文,而且文字信息就隐藏在像素之间。想要获得这幅图像的密文信息,我们只需要打开( https://hide.aoaoao.me),选择这张图像,即可解密出完整内容:

70127131046717.jpg
70127131046717.jpg

如果想要生成这种带有密文的图像,只需要选择已有的图像,填写密文,即可生成。这样的隐写术不是直接讲内容写入文件数据,而是通过微调像素的色值来达到存放数据的目的,由于只是微调,因此正常人很难察觉其中的变化。

原理

  1. 将待处理文本转换为二进制格式,并补足 16 位连接起来
  2. 遍历图像的每个像素的每个色彩通道值,与之前的二进制数据相对应,如果为 1 ,则微调当前色彩值至最近的偶数,反之为奇数
  3. 在图像开始和文本写入结束时分别加入特殊标记以便后期读取识别
    理论上一张图像可以存放的字数(中英文都算为1个字)=(图像长像素数X图像宽像素数-34)/16。比如:一张500像素X500像素的图像可以存放约15万字。

我用一些图像测试了一下,大家可以对比对比:

原图:

qww.jpg
qww.jpg

下图为写入《独立宣言》中文译文后的图像:

963573080_result.png
963573080_result.png

源代码

GitHub:https://github.com/HFO4/HideByPixel

Demo:https://hide.aoaoao.me/

(代码匆忙写成,有许多 Bug ,时不时会抽风,请多多包涵)