如何在PNG中编码二进制数据?
我想了解如何将少量的二进制数据(比如大约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
就这样,你知道信息在哪里,以及应该如何提取它。不过,这种方法在容量上是非常有限的。