基于 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

运行结果:

相关推荐
大江东去浪淘尽千古风流人物21 分钟前
【HIMO】跨模态图像匹配算法:IMO方向场提取与PolarP描述符源码精讲
matlab·跨模态·遥感·图像匹配·1024程序员节·特征描述符
CRMEB系统商城35 分钟前
家电零售的供应商协同与物流提效
java·开发语言·人工智能·小程序·1024程序员节
星夜离尘5639 分钟前
MATLAB 因果采样保持:用历史匹配和数据年龄防止未来信息泄漏
数据结构·算法·matlab
王大师王文峰1 小时前
Java+AI 面试题(二):业务场景设计 10 例【客服机器人、合同审查、Text2SQL、告警降噪、成本优化】场景题答法与追问链路
java·开发语言·人工智能
言乐61 小时前
Python实现三轴联动根据数据自动打磨镜片模型
开发语言·python
CHHH_HHH1 小时前
【Linux网络篇】初识网络与Socket编程基础
linux·服务器·c语言·开发语言·网络·后端·1024程序员节
jimy11 小时前
C++ 中 xvalue 的 identity 存在哪里?和 lvalue 的 identity 有什么区别?
开发语言·c++·1024程序员节
yujunl1 小时前
U9 无授权的模式WebAPI开发的总结
开发语言·1024程序员节
zzu123zsw2 小时前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
开发语言·python·rust·大模型·ai agent
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》Provider分析与实现
开发语言·c++·语言模型