多媒体安全技术 LSB隐写

编程入门 行业动态 更新时间:2024-10-26 22:19:26

<a href=https://www.elefans.com/category/jswz/34/1768490.html style=多媒体安全技术 LSB隐写"/>

多媒体安全技术 LSB隐写

实验报告
实验题目:LSB隐写
课程题目:多媒体安全技术
学号:512018
1、实验目的和要求
(1)实现LSB隐写,仔细观察图像隐写前后的异同。
(2)实现RS隐写。
(3)对100张512*512大小图片,进行嵌入率为0.5的LSB隐写,用RS隐写分析计算正确率。
(4)实现抵抗RS分析的LSB隐写
2、实验设备(环境)
Matlab和python
3、实验步骤
(1)编写python代码实现Lsb隐写和提取图片。

(2)RS分析,编写Matlab代码如下。

(3)RS分析100张图片的平均值,编写Matlab代码如下。

(4)抵抗RS分析的LSB隐写,用matlab编写。

  1. 实验结果
    (1)使用python编写lsb隐写代码,运行结果之后隐写图片为。

(2)提取结果为

(3)RS分析,单张图片结果

(4)RS分析100张的结果。

(5)取平均值的效果

(6)抵抗RS分析的LSB隐写。

5、讨论和分析(分析实验原理,为什么会得到这样的结果以及在试验中应注意的问题)
LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB)。
RS主要是针对采用伪随机LSB嵌入算法进行攻击的一种方法。
应注意的问题:
因为一开始对Matlab的代码不是很熟悉,所以在写LSB隐写的时候还是选择了python进行编写代码。在写RS分析的时候,用python参考了很多网上的例子都无法成功运行,最后选择了书上的方法。学会了Matlab如何批量处理图片和plot对于图形的绘制。 批处理文件:

Plot:  plot(x,y)这种格式中,若x,y是向量,则它们必须具有相同的长度。函数将以x为横轴,绘制y。 若x,y都是矩阵,则它们必须具有相同的尺寸,plot函数将针对x的各列绘制y的每列。更确切的说,将x和y的对应的各列取出来,绘制曲线。比如x和y分别为n*n的矩阵,则plot函数将x的第1列和y的第1列对应取出来,绘制一条曲线,然后将x的第二列与y的第二列对应起来,绘制一条曲线,如此下去直到第n条匹配绘制完成。

代码

extract.py

from PIL import Image# print(watermark)def deEncry(img, length):# 计数器count = 0wt = ""for i in range(img.size[0]):for j in range(img.size[1]):# 获取像素点的值rgb = img.getpixel((i, j))wt = wt + str(rgb % 2)count += 1if count == length:# print(len(wt))breakreturn wtdef showImage(wt):# str2初始化为liststr2 = []# 将wt的值转变为RGB值for i in range(0, len(wt), 8):# 以每8位为一组二进制,转换为十进制str2.append(int(wt[i:i + 8], 2))# 绘制和显示水印图片print(str2)img_out = Image.new("L", (96, 96))count = 0for m in range(0, 96):for n in range(0, 96):img_out.putpixel((m, n), str2[count])count += 1img_out.show()img1 = Image.open("D:/schoolstudy/大三下/隐写课/实验一/2.tif")
length = 73728
wt = deEncry(img1, length)
# print(wt)
showImage(wt)

LSB.py

from PIL import Image# print(watermark)
def plus(str):return str.zfill(8)# 获取水印图片的每一个像素值,i:指定要检查的像素点的逻辑X轴坐标。j:指定要检查的像素点的逻辑Y轴坐标。
def getcode(watermark):str1 = ""print(watermark.size[0])print(watermark.size[1])for i in range(watermark.size[0]):for j in range(watermark.size[1]):# 获取每个像素的RGB值rgb = watermark.getpixel((i, j))# print(rgb,end='|')# print(bin(rgb),end='|')str1 = str1 + plus(bin(rgb).replace('0b', ''))# print (str)return str1# 加密
def encry(img, code):# 计数器count = 0codelen = len(code)print(codelen)for i in range(img.size[0]):for j in range(img.size[1]):# 获取每个像素的RGB值if count == codelen:breakdata = img.getpixel((i, j))# print (r)# print(codelen)#24data = (data - data % 2) + int(code[count])img.putpixel((i, j), data)count += 1img.save('D:/schoolstudy/大三下/隐写课/实验一/2.tif')im = Image.open("D:/schoolstudy/大三下/隐写课/实验一/1.tif")
watermark = Image.open("D:/schoolstudy/大三下/隐写课/实验一/2.png")
code = getcode(watermark)
# print(len(code))
encry(im, code)

rs_program.m

file_path = 'D:\schoolstudy\大三下\隐写课\实验1\100\';
img_path_list = dir(strcat(file_path,'*.tif'));
img_num = length(img_path_list);
images = cell(1,img_num);
rs_final=zeros(10,4);if img_num>0for i = 1:img_numimg_name = img_path_list(i).name;fprintf('正在处理%s\n',img_name);
t=imread(img_name);
[p,q]=size(t);
I=t(1:p,1:q);
sz=size(I);
m=floor(sz(1)/8);
n=floor(sz(2)/8);
rs=zeros(10,4);
cor=zeros(1,3);
M=randsrc(8,8,[0 1]);
tmp=zeros(8,8);
for i=1 : 10r=floor(sz(1)*i/10);c=floor(sz(2)*i/10);msg=randsrc(r,c,[0 1]);s=I;s(1:r,1:c)=bitset(s(1:r,1:c),1,msg);for j=1 : mrv=[(j-1)*8+1:j*8];for k=1 : ncv=[(k-1)*8+1:k*8];tmp=s(rv,cv);cor(1)=SpaceCor(tmp);cor(2)=SpaceCor(f1(tmp,M));cor(3)=SpaceCor(f_1(tmp,M));if cor(2)>cor(1)rs(i,1)=rs(i,1)+1;elseif cor(2)<cor(1)rs(i,2)=rs(i,2)+1;endendif cor(3)>cor(1)rs(i,3)=rs(i,3)+1;elseif cor(3)<cor(1)rs(i,4)=rs(i,4)+1;endendend
end
end
rs=rs/ (m * n);
for i=1 : 10rs_final(i,1) = rs_final(i,1)+rs(i,1);rs_final(i,2) = rs_final(i,2)+rs(i,2);rs_final(i,3) = rs_final(i,3)+rs(i,3);rs_final(i,4) = rs_final(i,4)+rs(i,4);
endend
end
rs_final = rs_final/100;
figure;
plot([0.1:0.1:1.0],rs_final(:,1),[0.1:0.1:1.0],rs_final(:,2),[0.1:0.1:1.0],rs_final(:,3),[0.1:0.1:1.0],rs_final(:,4));
legend('Rm','Sm','R-m','S-m');function y=SpaceCor(x)
idx = [1,1; 1,2; 2,1; 3,1; 2,2; 1,3; 1,4; 2,3; 3,2; 4,1; 5,1; 4,2; 3,3; 2,4; 1,5;...1,6; 2,5; 3,4; 4,3; 5,2; 6,1; 7,1; 6,2; 5,3; 4,4; 3,5; 2,6; 1,7;...1,8; 2,7; 3,6; 4,5; 5,4; 6,3; 7,2; 8,1; 8,2; 7,3; 6,4; 5,5; 4,6; 3,7; 2,8;...3,8; 4,7; 5,6; 6,5; 7,4; 8,3; 8,4; 7,5; 6,6; 5,7; 4,8; 5,8; 6,7; 7,6; 8,5;...8,6; 7,7; 6,8; 7,8; 8,7; 8,8;];
n=64;
y=0;
for i=1 : n-1r1=idx(i,1);c1=idx(i,2);r2=idx(i+1,1);c2=idx(i+1,2);y=y + abs(x(r1,c1)- x(r2,c2));
end
endfunction y=f_1(x,M)
szx=size(x);
szm=size(M);
if szx ~= szmfprintf(1,'the size of x and M must be the same!\n');
end
y=x;
for i=1:szx(1)for j=1:szx(2)if M(i,j)~=0odd=mod(x(i,j),2);if odd == 0y(i,j)=x(i,j) - 1;elsey(i,j)=x(i,j) + 1;endendend
end
endfunction y = f1(x,M)
szx=size(x);
szm=size(M);
if szx~=szmfprintf(1,'the size of x and M must be the same!\n');
end
y=x;
for i=1 :szx(1)for j=1: szx(2)if M(i,j)~=0odd = mod(x(i,j),2);if odd ==0y(i,j)=x(i,j)+1;elsey(i,j)=x(i,j)-1;endendend
end
end

更多推荐

多媒体安全技术 LSB隐写

本文发布于:2024-03-10 14:32:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728235.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多媒体   技术   LSB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!