F5隐写算法中矩阵编码详解

最近一段时间都在看隐写算法,F5算法算法比较经典的一个了,花了不少时间来琢磨,对于其中的矩阵编码方法终究是难以理解,找了很多资料,基本就是说了一下公式,不胜详略,难有一个能比较说的清楚的,这里分享一下我的看法,对之进行详细的说明。
关于F5隐写算法可以看论文:
F5—A Steganographic Algorithm High Capacity Despite Better Steganalysis
这里不再详细介绍

矩阵编码的基本思想:尽可能修改最少的位数来嵌入秘密信息,用(d,n,k)来表示,d为最多需要修改的位数,n为利用的比特数,k为嵌入信息的比特数,n = 2的k次方-1。在F5中只讨论d=1的情况;

这里简单介绍最多修改一位数据嵌入2bit信息的基本原理:
a1, a2 ,a3 为可改变位,x1,x2 为嵌入信息,
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
可以发现在a1, a2, a3三个比特位中嵌入x1,x2两个比特位信息最多只需要改变一个比特位数据。

下面介绍一般的情况(为了方便,直接盗图):

这里写图片描述

直接看貌似不太懂,不要紧,待我细细说来:
这里需要注意的是,在这里进行异或的均为二进制数,x为包括这一组所有x的向量,即x1 = 1,x2 = 1,x3 = 0,则x = 110

来个实际的例子说明就好了:
k= 3, 则 :n = 7 有
a1,a2,a3,a4,a5,a6,a7,x1,x2,x3
假设:
a1 = 1
a2 = 1
a3 = 0
a4 = 1
a5 = 0
a6 = 0
a7 = 1
x1 = 1
x2 = 1
x3 = 0
f(a) = 1*1 ⊕ 1*2 ⊕ 1*4 ⊕ 1*7 = 001 ⊕ 010 ⊕ 100 ⊕ 111 = 000 = 0

s = f(a) ⊕ x = 000 ⊕ 110 = 110 = 6
则改变a6为1即可完成编码嵌入x1,x2,x3
提取方法:
f(a’) = 1*1 ⊕ 1*2 ⊕ 1*4 ⊕ 1*6 ⊕ 1*7 = 001 ⊕ 010 ⊕ 100 ⊕ 110 ⊕ 111 = 110
即x1,x2,x3分别为1,1,0,提取正确
若s = 0, 则不用修改就可以实现嵌入;

现在对于矩阵编码基本理解了吧,具体还可以参考文献:矩阵编码在空域LSB掩密算法的安全性研究

上面的图就是从中截取的,呵呵!

  • 10
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值