【隐写术】F5隐写
这些天入门MISC,对隐写术产生了兴趣,想 了改 一下,顺便写个博客记录。本篇博客着重讲解F5隐写的两种编码形式和密写。【隐写术】F5隐写一、什么是隐写术二、F5隐写1.矩阵编码(1)嵌入(2)提取2.快速编码一、什么是隐写术隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。举个关于隐写术的最简单的例子:一个24位图中8个bit
这些天入门MISC,对隐写术产生了兴趣,想
了改
一下,顺便写个博客记录,主要讲解F5隐写的矩阵编码和隐写工具。
建议先阅读计算机图像显示原理与BMP图像文件格式,对计算机的图像显示有初步认识。
一、什么是隐写术
wiki:隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。
为了方便理解wiki中关于隐写术的定义,现在举个关最简单的例子:一个24位图中8个bit的数据代表一个像素点,在这样的图片中,人眼是无法识别11111111
和11111110
所代表的蓝色的,最低有效位(LSB
)就可以被用来存储其他我们想保密的信息。
二、F5隐写
1.矩阵编码
矩阵编码的基本思想是用n位LSB表示k位信息(n>k),还是先从一个例子引入。如果要写入的原LSB是a=a1a2a3(n==3),要写入的信息x=x1x2(k == 2),
(这里的带下标的a和x都是值为0或1的二进制位,代表各个位上的对应值)
则让a的每两位异或得到的结构跟对应要写入的信息比对,不相等则修改LSB,相等则不改变。这个例子会导致下面四种情况:
- x1 == a1^a3,x2 == a2^a3,此时不做任何修改
- x1 != a1^a3 ,x2 == a2^a3,此时修改a1
- x1 == a1^a3,x2 != a2^a3,此时修改a2
- x1 != a1^a3 ,x2 != a2^a3,此时修改a3
由于二进制的异或运算的特性可以发现,这个例子里最多只要更改1位就可以达成数据嵌入的效果。
最大更改位数 dmax 的不同代表着不同的编码方式,毫无疑问, dmax取值不同使n和k的关系不同。每种编码方式都可以用有序数组(dmax,n,k)表示,而对于F5隐写,采用的矩阵编码是属于dmax == 1,即(1,n,k)的编码方式,此时n和k满足n ==2k - 1。
(1)嵌入
那么对于n位LSB和k位信息,我们也可以根据以上的例子推测出来通用形式了,下面给出具体的F5隐写的矩阵编码。(忽略了一开始的格式校验步骤等等)
-
根据待嵌入消息
x
的长度就算出n
和k
。 -
将待嵌入消息
x
分组,k
个消息为一组,每一组写入n
个LSB。 -
n
和k
满足关系 n=2k-1,即k
位信息嵌入n
位LSB。 -
a=a1a2a3……an是嵌入之前原LSB组成的
n
位二进制数据,计算散列函数f(a)
,
计算散列函数f(a):
第i
项表示为ai * i ,i从1开始到n每一项异或相加得到散列函数f(a)
值
-
计算要修改的是
a
的第几位,y==x ^ f(a)
-
如果用
a'
代表信息处理后的待嵌入LSB的码文,那么a'
只会出现下面两种情况:a'==a
,此时y==0,无需修改任何位。a'!=a
,此时y!=0,a
和a'
只有从左往右第y
个二进制位不同(dmax==1),则将第y
个二进制数取反 修改即嵌入成功。
-
进入下一组
k
位消息的嵌入。
(2)提取
提取的话很容易,关键看下面的推导公式
也就是说只要提取出a'
,然后进行f(a')
运算就可以得到信息了
2.隐写工具
安利一下,https://github.com/matthewgao/F5-steganography
(1)使用
cd到安装目录下命令行输入
java Extract “待提取的图片路径”
最后在安装目录下会生成一个output文件,这就是提取出的文件,举例如下。
【参考:
- https://xueshu.baidu.com/usercenter/paper/show?paperid=b15b8bd5deef65cfa827b9a9a254458c&site=xueshu_se】
更多推荐
所有评论(0)