基于 MATLAB 实现的流载体的LSB隐藏项目

♻️ 资源

大小: 1.43MB

➡️ 资源下载: https://download.csdn.net/download/s1t16/87425290

一、 流载体的LSB方法

  1. 嵌入:选择一个载体元素的子集

    ,其中共有


    个元素,用以隐藏秘密信息的


    个比特。然后在这个子集上执行替换操作,把


    的最低比特用


    来替换。

  2. 提取:找到嵌入信息的伪装元素的子集

    ,从这些伪装对象中抽出它们的最低比特位,排列之后组成秘密信息。

二、 选择隐藏位置子集的方法

  1. 顺序选取

缺点:已嵌和未嵌部分数据特征不同。

  1. 随机间隔法

用伪装密钥k作为伪随机数发生器的种子,生成一个伪随机序列,嵌入位置为

三、 LSB方法的特点

  1. 简单,易实现,容量大。
  2. 安全性不高,不能抵抗叠加噪声、有损压缩等破坏。

四、 LSB算法的基本原理

对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。

五、 LSB算法基本步骤

  1. 将原始载体图像的空域像素值由十进制转换成二进制;
  2. 用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;
  3. 将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。

六、 代码实现与解释

使用MATLAB实现LSB算法,用lsb_decode函数实现秘密信息嵌入,用lsb_encode函数实现秘密信息提取,之后img_lsb.m主程序对这两个函数进行调用测试,最后对提取信息进行误码率检测。

  1. lsb_encode

如果只把信息保存在一个像素中很容易丢失,所以根据信息长度与载体图片的长度划分小块,以一个小块存储一位信息,能大大增加信息隐藏的健壮性。

  1. lsb_decode函数

由于嵌入信息时是一小块为一个整体,所以提取时也同样要这样做,由于图片在传输或者保存过程中可能会有一些改变,所以计算每个小块内隐藏信息的阈值,如果一半以上为1则这个小块隐藏的信息为1否则为0。

  1. 主程序img_lsb.m

在调用嵌入函数之前,需要保证载体图片为灰度图片,如果载体图片不足以隐藏秘密信息,则人为把载体图片扩充以隐藏,以保证信息的正常嵌入。

调用提取函数,获得秘密信息。

最后计算一下提取的信息与隐藏信息的误码率,用于查看实验效果。

七、 实验结果展示

载体原图:lena_g.bmp 利用LSB嵌入秘密信息的图片:hide.bmp

运行结果:

相关推荐
frjc9 小时前
阿里云 ACK 环境 Arthas 在线调试指南
开发语言·python
CAE3209 小时前
BPM-Matlab光束传播法光学仿真
matlab·bpm·光束传播法
longxiaozhang610 小时前
C#继承:让代码少写一点,偷懒的好方法
开发语言·c#
weixin_4407305010 小时前
python+request实现接口-参数化小结
开发语言·python
CHHH_HHH10 小时前
【Linux系统篇】深入解析Linux文件系统:从磁盘寻址到软硬链接
linux·服务器·开发语言·后端·ubuntu
yngsqq10 小时前
窗体快速取消
java·开发语言
XiaQ091911 小时前
Linux 常用命令学习笔记(用户管理篇):用户、组与权限的钥匙
linux·开发语言·笔记·学习
不可求~11 小时前
C++ 报错交给 AI 之前,先准备好这 8 类信息
开发语言·c++·人工智能
名字还没想好☜11 小时前
用 Python struct 解析二进制协议:pack/unpack、字节序与对齐踩坑
开发语言·python·二进制·struct
一知半解仙11 小时前
当机器人学会泛化,而我在写Java:一名后端开发者的2026年8月21日观察手记
java·开发语言·机器人