当前位置:网站首页>matlab 基于奇偶校验的LSB隐藏水印 三种改进
matlab 基于奇偶校验的LSB隐藏水印 三种改进
2022-08-01 16:47:00 【我不是zzy1231A】
基于奇偶校验的脆弱水印算法受到奇偶校验的局限,检验不出更改偶数次的攻击(有一半检测不出来)。LSB有三个改进方向分别是:对嵌入过程中嵌入的方式进行更改;对嵌入水印的内容进行更改以及对水印嵌入前对水印进行预处理。
一、利用补余载体更改脆弱水印
方案
嵌入程序fragile.m在原有fragile的基础上增加返回了补余载体。fragile.m在读入原始水印和原始载体在后,先生成与原始载体同尺寸的全黑的初始补余载体。补余载体的矩阵值为原始载体高七位和对三取余的结果,返回两个载体完成嵌入。
提取程序infragile.m则先判断是否符合奇偶校验,然后再判断攻击后的图像高七位和对三取余的结果和补余载体的矩阵值是否相等,不等则存在篡改。
分析
该改进方案利用补余水印存储了载体本身的部分特征(对三取余的结果)。对灰度图像偶数次篡改攻击(2,4,6,8次攻击,其中不可能出现八次攻击(全白到全黑),六次攻击的可能性也较小)后每个坐标对3取余的结果都将会发生变化。所有将对三取余的结果作为补充判断攻击发生的标准,能够大幅解决奇偶校验检测疏漏的问题。
可以看到嵌入水印与原始载体基本一致,补余载体中包含部分水印信息、提取载体完整。(原始载体为lena)
对比改进前后,改进后检测更为准确。(由于水印本身没有变化,这里使用之前的攻击篡改)`
fragile.m
function [piccover,piccover2] = fragile1( piccover,M,N ) %piccover1载体,pic2ray水印,piccover2补余载体,M,N封面行列,m,n二值图行列
piccover2=zeros(M,N);%初始化补余载体
for i=1:M
for j=1:N
tmp = 0;
for k=2:8
tmp = tmp+bitget(piccover(i,j),k);
end
piccover2(i,j) = mod(tmp,3);
if mod(tmp,2) == 0
if mod(piccover(i,j),2) == 0
piccover(i,j) = piccover(i,j)+1;
end
else
if mod(piccover(i,j),2) == 1
piccover(i,j) = piccover(i,j)-1;
end
end
end
end
end
infragile.m
function pichidenew = infragile1(pichide1,pichide2,m,n)
pichidenew = ones(m,n);
for i=1:m
for j=1:n
tmp = 0;
for k=2:8
tmp = tmp+bitget(pichide1(i,j),k);
end
tmp1 = mod(tmp,3);
tmp = mod(tmp,2);
if bitget(pichide1(i,j),1)==tmp
pichidenew(i,j)=0;
else
pichidenew(i,j)=1;
end
if pichide2(i,j)~=tmp1
pichidenew(i,j)=0;
end
end
end
end
二、利用汉明距离嵌入第二位更改脆弱水印
方案
嵌入程序fragile.m在原有fragile的基础上增加了第二位作为345位与678位汉明距离的标记位。fragile.m在读入原始水印和原始载体在后,计算345与678位的汉明距离,先奇偶校验嵌入,后汉明校验嵌入。若汉明距离为0或1,则更改第二位为0,若第二位原本非0,则还需改变第三位使奇偶校验和不变。同理,若汉明距离为2或3,则更改第二位为1,若第二位原本非1,则还需改变第三位使奇偶校验和不变。完成嵌入。
提取程序infragile.m则先判断是否符合奇偶校验,然后再判断水印第二位是否对应目前图像的345与678位汉明距离(汉明距离为0或1,第二位等于0,反之等于1),不等则存在篡改。
分析
该改进方案计算345与678位的汉明距离,结果有0123四种情况。由于需要排除奇偶校验中偶次改变不能被检测出的情况,只用将汉明距离0或1和汉明距离2或3两两分组(汉明距离变化奇数次的情况原本奇偶校验就能检测出),若汉明距离为0或1,则更改第二位为0,若第二位原本非0,则还需改变第三位使奇偶校验和不变。同理,若汉明距离为2或3,则更改第二位为1,若第二位原本非1,则还需改变第三位使奇偶校验和不变。检测过程中需要在奇偶校验检测的基础上,判断水印第二位是否对应目前图像的345与678位汉明距离,若不能对应,则说明出现偶数次篡改攻击,将不满足判别的位置标记出。
在新生成的水印上进行篡改,可以看到改进后的提取信息效果更好
fragile.m
function piccover = fragile2(piccover,M,N ) %piccover封面,pic2ray二值图,M,N封面行列,m,n二值图行列
for i=1:M
for j=1:N
tmp = 0;
hm = 0;
for k=2:8
tmp = tmp+bitget(piccover(i,j),k);
end
if (bitget(piccover(i,j),3)~=bitget(piccover(i,j),6))
hm = hm+1;
end
if (bitget(piccover(i,j),4)~=bitget(piccover(i,j),7))
hm = hm+1;
end
if (bitget(piccover(i,j),5)~=bitget(piccover(i,j),8))
hm = hm+1;
end
if mod(tmp,2) == 0
if mod(piccover(i,j),2) == 0
piccover(i,j) = piccover(i,j)+1;
end
else
if mod(piccover(i,j),2) == 1
piccover(i,j) = piccover(i,j)-1;
end
end
if (hm==0||hm==1)
hm2 = 0;%第二位改为0,更改第三位保持奇偶校验不变
if (bitget(piccover(i,j),2)~=0)
piccover(i,j) = piccover(i,j)+6;
end
else
hm2 = 1;
if (bitget(piccover(i,j),2)~=1)
piccover(i,j) = piccover(i,j)+6;
end
end
end
end
end
infragile.m
function pichidenew = infragile2(pichide,m,n)
pichidenew = ones(m,n);
for i=1:m
for j=1:n
tmp = 0;
hm = 0;
if (bitget(pichide(i,j),3)~=bitget(pichide(i,j),6))
hm = hm+1;
end
if (bitget(pichide(i,j),4)~=bitget(pichide(i,j),7))
hm = hm+1;
end
if (bitget(pichide(i,j),5)~=bitget(pichide(i,j),8))
hm = hm+1;
end
for k=2:8
tmp = tmp+bitget(pichide(i,j),k);
end
tmp = mod(tmp,2);
if bitget(pichide(i,j),1)==tmp
pichidenew(i,j)=0;
else
pichidenew(i,j)=1;
end
if (hm==0||hm==1)
if bitget(pichide(i,j),2)~=0
pichidenew(i,j)=0;
end
else
if bitget(pichide(i,j),2)~=1
pichidenew(i,j)=0;
end
end
end
end
end
三、双奇偶校验位更改脆弱水印
方案
嵌入程序fragile.m使用双奇偶校验位,第二位作为高六位的奇偶校验位,第一位则用于高7位的奇偶校验位。第一位作为第二位的辅助判断为,只有在第二位发生变化时(ifchange==1)才做修改。
提取程序infragile.m则先判断是分别判断第二第一位是否满足奇偶校验。
分析
该改进方案用第二位作为高六位的奇偶校验为,且存在高七位有偶数次更改无法判别的情况,再通过最低位进行补充判断是否符合奇偶校验,进一步提升了奇偶校验的准确性。
在新生成的水印上进行篡改,可以看到改进后的提取信息效果更好
Fragile.m
function piccover = fragile( piccover,M,N ) %piccover封面,pic2ray二值图,M,N封面行列,m,n二值图行列
for i=1:M
for j=1:N
tmp = 0;
ifchange = 0;
for k=3:8
tmp = tmp+bitget(piccover(i,j),k);
end
if mod(tmp,2) == 0
if mod(piccover(i,j),4) == 0||mod(piccover(i,j),4) == 2
piccover(i,j) = piccover(i,j)+2;
ifchange = ifchange+1;
end
else
if mod(piccover(i,j),4) == 1||mod(piccover(i,j),4) == 3
piccover(i,j) = piccover(i,j)-2;
ifchange = ifchange+1;
end
end
for k=2:8
tmp1 = tmp1+bitget(piccover(i,j),k);
end
if mod(tmp1,2) == 0
if mod(piccover(i,j),2) == 1 && ifchange==1
piccover(i,j) = piccover(i,j)-1;
end
else
if mod(piccover(i,j),4) == 0 && ifchange==1
piccover(i,j) = piccover(i,j)+1;
end
end
end
end
end
Infragile.m
function pichidenew = infragile(pichide,m,n)
pichidenew = ones(m,n);
for i=1:m
for j=1:n
tmp = 0;
for k=3:8
tmp = tmp+bitget(pichide(i,j),k);
end
tmp = mod(tmp,2);
if bitget(pichide(i,j),2)==tmp
pichidenew(i,j)=0;
else
pichidenew(i,j)=1;
end
for k=2:8
tmp1 = tmp1+bitget(pichide(i,j),k);
end
tmp1 = mod(tmp1,2);
if bitget(pichide(i,j),1)==tmp1
pichidenew(i,j)=0;
else
pichidenew(i,j)=1;
end
end
end
end
边栏推荐
猜你喜欢
阿里官方 Redis 开发规范
08 spark 集群搭建
MUI as a mobile phone to return to the action bar
04 flink 集群搭建
The site is not found after the website is filed. You have not bound this domain name or IP to the corresponding site! The configuration file does not take effect!
Complete knapsack problem to find the number of combinations and permutations
酷逼了 Pathetic Dog 第 304 场周赛
【黑马早报】胡军代言悟空理财涉嫌欺诈,疑似涉及390亿元;涪陵榨菜回应榨菜吃出脚指甲; 鸿星尔克再捐1个亿;腾讯控股股价跌回5年前...
金仓数据库KingbaseES安全指南--6.3. Kerberos身份验证
Vulnhub target drone: HARRYPOTTER_ NAGINI
随机推荐
11 Publish a series as soon as it is released
Financial products with high annualized returns
【二叉树】奇偶树
ESP8266-Arduino programming example-GA1A12S202 logarithmic scale analog light sensor
Winform的消息提示框帮助类
软测面试如何介绍项目?要做哪些技术准备?
PAT 甲级 A1003 Emergency
夸克网盘资源站
Unity ui点击事件只响应最上层ui的方式
时序数据库在船舶风险管理领域的应用
金仓数据库 OCCI迁移指南(2. 概述)
DevExpress的GridControl帮助类
C#Excel帮助类
Bugku-Misc-贝斯手
untiy Resorces目录动态加载资源
如何有效地开发 Jmix 扩展组件
C#的DateTime帮助类
ODrive开发 #1 ODrive固件开发指南[通俗易懂]
C#中关于DevExpress的常用操作和帮助类项目工程内容说明
块级元素、行内元素、行内块元素