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

运行结果:

相关推荐
夏天的清晨16 分钟前
C++入门学习
开发语言·c++·学习
新鲜势力呀19 分钟前
PHP 文件上传系统实战:从上传卡顿到分片上传 + 秒传 + 云存储架构完整优化方案
开发语言·架构·php
程序员老陆35 分钟前
从语法糖到类型系统:深度拆解 C++ Lambda 与可调用对象的“血缘关系”
开发语言·c++·程序设计
(Charon)36 分钟前
【C++面试】设计模式:手写单例模式与工厂模式
开发语言·c++
估值探索者37 分钟前
【Python量化系统工程实战 #01】数据存储选型 CSVSQLiteMySQL 对比与 SQLite 实战建库
开发语言·jvm·python·sqlite·api接口·数据api接口·股票数据api接口
根目录下的猫44 分钟前
ROS 2 C++(rclcpp)版本,实现话题订阅、话题发布,以及完整编译运行流程
开发语言·c++·算法
сокол1 小时前
【Python-基础-环境搭建】Ubuntu Python 开发环境搭建:编译、pipenv、pyenv、远程连接
开发语言·python·ubuntu
liangshanbo12153 小时前
JavaScript 面试题:Object.keys() 的返回顺序是无序的吗?
开发语言·javascript·ecmascript
朝朝辞暮i9 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J9 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa