用图片隐藏信息

图像如何隐藏信息


我们知道,信息加密的方式多种多样。我要介绍的是用图像对信息进行加密。
此处输入图片的描述
你能相信上面这张图里可能隐藏着信息吗?

首先,我们要了解图片的组成。一张图片,我们可以通过水平和竖直划分为许多小格,称为像素点。而每一个像素点可以用1位(0,1)、4位(0-15)、8位(0-255)、24位二进制数表示。
1位二进制只能表示0或1,即黑白两色。用4位表示则可以表示16种组合,如果把这16种组合看成颜色,就可以组成16色彩色的图像。用8位就有256种组合,可以由浅到深表达256级灰度。一幅图像可以看做像素点的个数乘以像素点的位数。现在的图像大多用24位表示即真彩色,其中8位表示红色,8位表示绿色,8位表示蓝色,即三原色。
假设一副图像只有两种颜色,红与黑,拿出一列像素点:

0 0 0 0 0 146 146 0 0

显然一个146无法隐藏信息,那么我们将它化为二进制:10010010将其从最高位到最低位竖起来写:
1 –高位
0
0
1
0
0
1
0 –低位
对于高位,把1改为0,则代表的十进制146则变成了18,差别非常大,如果反映到颜色上一眼就能看出。而至于低位,把0变为1,十进制变为147,对于颜色的改变微乎其微,肉眼很难分辨。所以,我们可以通过低位的变化隐藏一些信息。
所以这列像素可以按高低位排列:

000001100 —高位位平面
000000000
000001100
000000000
000000000
000001100
000000000 —低位位平面

我们将利用低位位平面将信息隐藏进去。
假设我要隐藏A这个字母,显然无法将A直接插进去。我们这时候可以将A也化为0-1序列。这就要用到ASCII码表。

此处输入图片的描述
其中,A可表示为01000001。接下来我们将把这个序列合并到低位位平面中。
这就需要用到二进制的运算:与,或,异或等。比如:10001111 AND 11111110,结果为10001110。这就把最后一位化为了0。同理,如果想让哪一位变成0,就让11111111中对应位改为0后进行与运算。同样的,如果想把某一位改为1,则将00000000对应位置改为1后进行或运算即可。
所以,操作过程即为:

IF 待隐藏信息的第i位为0 then
第i个像素的值=
第i个像素的值 AND 11111110
ELSE
第i个像素的值=
第i个像素的值 OR 00000001
END IF

这样,我们就把A隐藏在了图片中,而图片本身基本没有变化。所以,我们只要有原图和改变后的图就可以将信息翻译出来了。
那么下次我们看到一幅图的时候,它后面是否隐藏着某些信息呢?

猜你喜欢

转载自blog.csdn.net/ZhangyunqingGC/article/details/78347130
今日推荐