⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20070707-165713.txt

📁 LSB信息隐藏算法
💻 TXT
字号:
标题:LSB信息隐藏算法
出处:soriq blog
时间:Tue, 01 May 2007 20:05:49 +0000
作者:admin
地址:http://www.gacia.cn/blog/read.php/118.htm

内容:

点击在新窗口中浏览此图片
http://www.gacia.cn/blog/a...


LSB信息隐藏算法,就是通常把信息隐藏在图像像素的最后一位,这时信息通常是文本。把文本化成二进制代码,然后把它嵌入到图像像素的最后一位。这样做的好处是对图片的损耗很小,肉眼几乎无法分辨。但是一旦图片改变,如大小、格式等发生变化,隐藏的信息也会随之丢失。这必须通过重传操作来解决。

基本算法概述:
a. 在rand('state',key) 由key初始化随机序列,并由randno=randperm(256*256)得到一个值小于等于256*256的非重复随机序列,由这个序列随机各个值选取信息隐藏的象素点。
b. 因为随机序列是不重复的,且顺序由key决定,故只要保证key不丢失,即使图像被截取,对方仍然无法破解隐藏的信息。
c. 由隐藏者向目标者提供key和隐藏信息的长度,目标者再用同样的算法破解和key解析图片,即可还原出信息。

本实验中载体为256×256的灰度图像。

function lsb_hide(info,foutain,output,key)
%foutain是载体
%info_file是待隐藏信息所在的文件
%output输出隐藏后的混合文件
%key是生成随即序列的关键字
cover=imread(foutain);
fid=fopen(info);
[m,n]=fread(fid,'ubit1');
%判断载体是否足够
if (n/8*9)>(256*256)
  fclose(fid);
  error('嵌入信息量过大.');
end
cover=imread(foutain);
%用key初始化并生成随即序列
rand('state',key);
randno=randperm(256*256);
%隐藏算法
for i=1:(n/8)
  correct=0;
  for j=1:8
    %获取随即序列中的某一个值
    value=randno((i-1)*8+j);
    row=floor(value/256+1);
    col=mod(value,256)+1;
    cover(row,col)=bitset(cover(row,col),1,m((i-1)*8+j));
    correct=m((i-1)*8+j)+correct;
  end
  correct=mod(correct,2);
  row=floor(randno(256*256-i+1)/256+1);
  col=mod(randno(256*256-i+1),256)+1;
  cover(row,col)=bitset(cover(row,col),1,correct);
end
%写入文件
imwrite(cover,output);
fclose(fid);




function lsb_get(pfile,output,length,key)
%pfile是还原后的文件
%output隐藏信息的文件
%length是待提取信息的长度,即隐藏信息的位数=字节数*8
%key是密钥
n=length;
cover=imread(output);
rand('state',key);
randno=randperm(256*256);
fid=fopen(pfile,'w');
for i=1:(n/8)
  correct=0;
  for j=1:8
    value=randno((i-1)*8+j);
    row=floor(value/256+1);
    col=mod(value,256)+1;
    fwrite(fid,bitget(cover(row,col),1),'bit1');
    correct=bitget(cover(row,col),1)+correct;
  end
  correct=mod(correct,2);
  row=floor(randno(256*256-i+1)/256+1);
  col=mod(randno(256*256-i+1),256)+1;
  if correct~=bitget(cover(row,col),1)
    fclose(fid);
    error('校验出错,提取失败.');
  end
end
fclose(fid);




Generated by Bo-blog 2.0.3 sp1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -