测试环境:Windows7
开发语言:MATLAB
首先,我们必须清楚为什么要采用图像加密及隐写技术,生活中,我们每个人都有一些属于自己的秘密、图片的版权以及一些隐私交流信息,第二,图像加密及隐写的原理,只有掌握了其原理实现起来便是一件很容易的事了。本文主要讲解基于LSB( LSB,Least Significant Bits)的图像加密技术与混沌序列混合使用的实现原理,希望能够帮助到大家。
我们都知道图片是由很多个像素值组成,像素值大小为0-255为了保证我们隐写后的图片B与原图A一致,所以我们需要将每一个像素值转换为16位二进制数,然后对转换后的16位二进制数的最后一位进行置零,最后将自己想要写入的文字依次或者按照自己设定好的算法进行写入,但这样写入安全性并不高,很容易被黑客反解密出来,倘若是重要机密信息就这样被破解了那就糟了,因此我们真正的做法是将写入的明文转换为密文在进行写入到图片中,最后将加密后的图片再进行置乱,以此达到信息的安全性,这只是大概的流程思路,明白了其原理,接下来我们就可以开始其具体的实现的步骤了,详细过程如下:
一、图像加密过程实现:
1. 使用Matlab语言读取图片像素
2. 从文件中读取将要写入图片中的内容,并将读取的每一个文字转换成16进制数
(1)如将内容“这是一个不可告人的秘密”加密隐写到图片中,代码截图如下:
(2)密文转换为16进制数截图如下:
3. 将获取的明文使用混沌算法进行加密得到密文
(1)产生混沌序列数,截图如下:
产生混沌序列数的代码
混沌序列产生的数据矩阵
(2)读取混沌序列中的数与明文进行按位异或产生密文
4. 将加密后的密文,及文字信息的长度写入图片的最低位(这里为什么要获取文字长度,因为在解密的过程中用到)
5. 获取到隐写前后的图片如下
隐写前图片
隐写后图片
6. 对比隐写前后两张图,看不出任何差别,到这里就已经完成了基本加密以及隐写过程
7. 再将隐写后的图片进行加密
进行加密后图片如下:
进行一次加密
进行多次加密
二、图像解密的过程
图像解密过程本质就是加密的逆向过程,获取到相同的混沌序列以及相同的秘钥进行解密就可以了,解密后得到的明文截图如下:
到此,整个图像的隐写加密过程结束。
详细代码见github: https://github.com/luhongchun/image-encryption