如何在PNG中编码二进制数据?

1 投票
1 回答
2834 浏览
提问于 2025-04-16 18:12

我想了解如何将少量的二进制数据(比如大约200字节)通过颜色编码到PNG图片里;这基本上就是Hid.im.torrent文件所做的事情。如果有任何信息或者最佳实践的建议,那就太好了。

谢谢!

1 个回答

5

隐藏数据在无损压缩的图片里,最基本的方法就是修改每个像素的最低位,这样这些位加起来就能代表一些信息。

比如在红绿蓝(R.G.B.)颜色模式中,你可以修改红色值的最后一位(其实人眼对红色的敏感度比对绿色和蓝色要低)。

举个例子,假设我们画一条8个像素的线,每个像素的红色值都是前一个像素的红色值加1。

   Pixel1 = (120, 203, 391)
   Pixel2 = (121, ..., ...)
   ...
   Pixel8 = (128, ..., ...)

用二进制表示就是:

   Pixel1 = (01111000, ..., ...)
   Pixel2 = (01111001, ..., ...)
   ...
   Pixel8 = (10000000, ..., ...)

现在,我们来在这条线上加密数字63:

   63 = 00011111
   # Encrypting from right to left, by writing the data to the minor bit
   Pixel1 = (0111100[0], ..., ...) -> 120
   Pixel2 = (0111100[0], ..., ...) -> 120
   Pixel3 = (0111101[0], ..., ...) -> 122
   Pixel4 = (0111101[1], ..., ...) -> 123
   Pixel5 = (0111110[1], ..., ...) -> 125
   ...
   Pixel8 = (1000000[1], ..., ...) -> 129

就这样,你知道信息在哪里,以及应该如何提取它。不过,这种方法在容量上是非常有限的。

撰写回答