LSB算法解析
- 格式:ppt
- 大小:2.06 MB
- 文档页数:24
信息隐藏课设LSB算法实验步骤隐藏提取及测试(1)隐藏算法,保存在hide_lsb.m文件中。
function o = hide_lsb(block, data, I)%function o = hide_lsb(block, data, I)%block:the minimal ceil to hide%data:the information%I:source imagesi = size(I);lend = length(data);%将图像划分为M*N个小块N = floor(si(2) / block(2));M = min(floor(si(1) / block(1)), ceil(lend / N));o = I;for i = 0 : M-1%计算每小块垂直方向起止位置rst = i * block(1) + 1;red = (i + 1) * block(1);for j = 0 : N-1%计算每小块隐藏的秘密信息的序号idx = i * N + j + 1;if idx > lendbreak;end;%取每小块隐藏的秘密信息bit = data(idx);%计算每小块水平方向起止位置cst = j * block(2) + 1;ced = (j + 1) * block(2);%将每小块最低位平面替换为秘密信息o(rst:red, cst:ced) = bitset(o(rst:red, cst:ced), 1, bit);end;end;(2)提取算法,保存在dh_lsb.m文件中。
function out = dh_lsb(block, I)%function out = dh_lsb(block, I)%block:the minimal ceil to dehide%I:stegoed imagesi = size(I);%将图像划分为M*N个小块N = floor(si(2) / block(2));M = floor(si(1) / block(1));out = [];%计算比特1判决阈值:即每小块半数以上元素隐藏的是比特1时,判决该小块嵌入的信息为1thr = ceil((block(1) * block(2) + 1) / 2);idx = 0;for i = 0 : M-1%计算每小块垂直方向起止位置rst = i * block(1) + 1;red = (i + 1) * block(1);for j = 0 : N-1%计算每小块将要数据的秘密信息的序号idx = i * N + j + 1;%计算每小块水平方向起止位置cst = j * block(2) + 1;ced = (j + 1) * block(2);%提取小块最低位平面,统计1比特个数,判决输出秘密信息tmp = sum(sum(bitget(I(rst:red, cst:ced), 1)));if(tmp >= thr)out(idx) = 1;elseout(idx) = 0;end;end;end;(3)测试脚本,保存在test.m文件中。
LSB(Least Significant Bit)替换算法是一种常见的隐写术(Steganography)算法,用于在一个数据载体中隐藏秘密信息。
它的基本原理是将要隐藏的秘密信息嵌入到数据载体的最低有效位中,而对载体的外观几乎没有明显影响。
具体来说,LSB替换算法的步骤如下:
1. 选择要隐藏的秘密信息,将其转换为二进制形式。
2. 选择一个载体文件,这通常是一张图片或音频文件等。
3. 将载体文件转换为二进制形式。
4. 将秘密信息的每个二进制位按顺序替换掉载体文件中对应位置上的最低有效位。
如果秘密信息的位数超过了载体文件的可用位数,可以选择扩展载体文件或者舍弃多余的秘密信息。
5. 将修改后的二进制数据重新转换回载体文件的格式。
6. 可以通过查看载体文件的最低有效位来提取出隐藏的秘密信息。
需要注意的是,LSB替换算法属于较为简单的隐写术算法,容易被一些隐写术检测工具和算法所探测到。
此外,对载体文件进行过多的修改可能会导致视听质量的损失,因此在使用LSB替换算法时需要权衡隐蔽性和影响程度。
请注意,隐写术的使用和传播可能受到法律和道德限制,请确保你的行为符合适用的法律法规。
lsb算法介绍
---------------------------------------------------------------------- LSB(LeastSignificant Bits)算法:将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显著位,改变这一位置对载体图像的品质影响最小。
LSB算法的基本原理:
对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。
由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。
然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。
因此LSB算法最初是用于脆弱性水印的。
LSB算法基本步骤:
1 将原始载体图像的空域像素值由十进制转换成二进制;
2 用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;
3 将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。
一.数字水印数字水印技术数字水印技术(Digital Watermark):技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。
目前主要有两类数字水印,一类是空间数字水印,另一类是频率数字水印。
空间数字水印的典型代表是最低有效位(LSB)算法,其原理是通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达水印的信息,以达到嵌入水印的目的。
频率数字水印的典型代表是扩展频谱算法,其原理是通过时频分析,根据扩展频谱特性,在数字图像的频率域上选择那些对视觉最敏感的部分,使修改后的系数隐含数字水印的信息。
可视密码技术二.可视密码技术:可视密码技术是Naor和Shamir于1994年首次提出的,其主要特点是恢复秘密图像时不需要任何复杂的密码学计算,而是以人的视觉即可将秘密图像辨别出来。
其做法是产生n张不具有任何意义的胶片,任取其中t张胶片叠合在一起即可还原出隐藏在其中的秘密信息。
其后,人们又对该方案进行了改进和发展。
主要的改进办法办法有:使产生的n张胶片都有一定的意义,这样做更具有迷惑性;改进了相关集合的造方法;将针对黑白图像的可视秘密共享扩展到基于灰度和彩色图像的可视秘密共享。
三.数字水印(Digital Watermark或称Steganography)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。
数字水印是信息隐藏技术的一个重要研究方向。
数字水印技术源于开放的网络环境下保护多媒体版权的新型技术,它可验证数字产品的版权拥有者、识别销售商、购买者或提供关于数字产品内容的其他附加信息,并将这些信息以人眼不可见的形式嵌入在数字图像或视频序列中,用于确认数字产品的所有权和跟踪侵权行为。
除此之外,它在证据篡改鉴定,数字的分级访问,数据产品的跟踪和检测,商业视频广播和因特网数字媒体的服务付费,电子商务的认证鉴定,商务活动中的杜撰防伪等方面也具有十分广阔的应用前景。
lsb算法原理LSB算法原理随着信息技术的快速发展,信息安全越来越成为人们关注的焦点。
为了保护数据隐私,人们开始使用各种加密技术来保护数据。
其中一种常见的加密技术就是隐写术。
隐写术是一种将一种信息嵌入到另一种信息中的技术。
其中一种隐写术就是LSB算法。
LSB算法是一种在数字图像中隐藏秘密信息的方法。
该算法是一种最常见的隐写术之一。
LSB是最低有效位(Least Significant Bit)的缩写,指的是二进制数中最右边的一位。
在LSB算法中,将秘密信息的每一位嵌入到数字图像的最低有效位中。
具体来说,对于一个像素的RGB三个分量,每个分量的值都是一个0到255之间的整数。
将要隐藏的信息转化为二进制数后,将其每一位嵌入到RGB三个分量中的最低有效位中。
这样,每个像素点就可以存储三个二进制数,即三个隐藏的信息位。
如果要隐藏的信息比较长,那么就需要使用多个像素点来存储。
LSB算法的优点是实现简单,不会引起明显的图像失真。
但是,由于嵌入秘密信息后,图像的像素值会发生微小的变化,所以需要注意控制嵌入信息的数量,以免引起可见的图像失真。
此外,LSB算法也比较容易被破解。
因此,在实际应用中,需要结合其他加密技术一起使用。
LSB算法不仅可以用于图像文件中的隐写,也可以用于音频文件和视频文件中的隐写。
对于音频文件和视频文件,嵌入秘密信息的位置可以是每个采样点或每一帧的像素值。
在实际应用中,需要根据具体情况选择合适的嵌入位置。
LSB算法是一种常见的隐写术,可以用于数字图像、音频文件和视频文件中的秘密信息隐藏。
但是,由于其安全性不高,需要结合其他加密技术一起使用,以保护数据隐私。
lsb替换算法摘要:一、替换算法概述1.替换算法定义2.替换算法在加密和解密中的作用二、LSB替换算法原理1.LSB概念介绍2.LSB替换算法的基本思想3.LSB替换算法的操作步骤三、LSB替换算法的应用1.数字图像加密2.文本加密3.数据完整性检查四、LSB替换算法的优缺点分析1.优点a.简单易懂b.加密解密速度快c.实现起来较为容易2.缺点a.容易受到攻击b.密钥管理困难c.破解难度相对较低正文:一、替换算法概述替换算法是密码学中的一种基本技术,主要应用于加密和解密过程。
它通过将明文或密文中的某些字符替换为其他字符,从而达到保护信息的目的。
在密码学中,替换算法常常与其他加密技术,如置换、异或等结合使用,以提高加密强度。
二、LSB替换算法原理LSB(Least Significant Bit,最低有效位)替换算法是一种基于位运算的替换方法。
它通过替换字符中的最低有效位来实现信息的加密和解密。
具体来说,LSB替换算法的基本思想是将明文或密文中每个字符的最低有效位替换为其他位,从而改变字符的值。
这种替换方法可以保证原始信息在加密和解密过程中得到保护。
具体操作步骤如下:1.确定替换规则:根据加密或解密需求,确定替换的位数和替换方法。
例如,可以规定将字符的最低有效位替换为0或1。
2.遍历明文或密文:对明文或密文中的每个字符进行替换操作。
对于每个字符,提取其最低有效位,并根据替换规则进行替换。
3.替换完成后,得到加密后的密文或解密后的明文。
三、LSB替换算法的应用LSB替换算法因其简单易懂、加密解密速度快以及实现起来较为容易等特点,在实际应用中得到了广泛的应用。
以下是一些典型的应用场景:1.数字图像加密:LSB替换算法可以用于数字图像的加密。
通过替换图像中的像素值,可以实现图像的加密和解密。
2.文本加密:在文本加密中,LSB替换算法可以用于替换文本中的字符,以达到保护文本信息的目的。
3.数据完整性检查:LSB替换算法还可以用于数据完整性检查。
基于LSB算法的可逆水印LSB是Least Singificant Bit的缩写,意思是最不重要比特位。
LSB算法利用了数字图像处理中位平面的原理,即改变图像的最低位的信息,对图像信息产生的影响非常小以至于人眼的视觉感知系统往往不能察觉。
以一幅256灰度的图像为例,256灰度共需要8个位来表示,但其中每一个位的作用是不一样的,越高位对图像的影响越大,反之越低的位影响越小,甚至不能被感知。
LSB算法实现较为简单,嵌入水印步骤如下:①将原始载体图像的时/空域像素值由十进制转换到二进制表示,下面以大小的块图像为例。
②用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位,假设待嵌入的二进制秘密信息序列为[ 0 1 1 0 0 0 1 0 0 ],则替换过程如图所示。
③将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像,如图所示。
LSB算法提取水印步骤如下:○1将得到的隐藏有秘密信息的十进制像素值转换为二进制数据,如图所示。
○2将二进制数据的最低有效位提取出来,即为秘密信息序列[ 0 1 1 0 0 0 1 0 0 ]。
如图所示。
但是,对于上述思路,一个八位的二进制水印信息就需要载体作品用八个像素值空间去存储。
如果盲目照搬上述思路来进行水印嵌入,不仅在有限的作品容量中嵌入的信息量小,而且当嵌入的水印数据量多时,计算机的计算量会很大,也可能载体作品的容量不够或为了使作品能够存储水印信息而将作品高位也进行数据置换,从而带来严重的失真。
因此,必须在上述思路的基础上另辟蹊径。
本作业中,我是将一副灰度图片嵌入到一副偏蓝的RGB图片中。
这里我在嵌入前先将图片进行了裁剪,使得载体图片的R、G、B任何一个通道矩阵的行、列大小都大于的嵌入的灰度图片矩阵的行、列大小。
由于图片偏蓝,因此为了使得嵌入水印后,图片失真较小,我选择用色彩非常弱的红色通道嵌入灰度图片。
程序算法如下:1、取出RGB图片的红色通道,然后用mod这个函数将该通道与灰度图片矩阵大小相等的部分的各个像素取模2值,那么像素值为奇数的就会余1,像素值为偶数的就为0,将取模余数用一个和灰度图片矩阵等大小的矩阵存储起来,然后将红色通道被模2的像素与其对应余数相减。
引言信息隐藏将在未来网络中保护信息不受破坏方面起到重要作用,信息隐藏是把机密信息隐藏在大量信息中不让对手发觉的一种方法。
信息隐藏的方法有很多种,基于图象的信息隐藏检测技术是隐写分析技术的基础,对于保障网络信息安全和提高信息隐藏算法的安全性具有重要意义。
最低有效位算法LSB(Least significant bit)是一种简单而通用的信息隐藏方法,大部分的多媒体文件(如图像、音频和视频文件等)都可作为LSB算法中的载体。
本文讨论以图像为载体的LSB隐藏算法。
第一章绪论1.1 信息隐藏技术的来源随着互联网的迅速发展,网上提供服务越来越丰富,人们如今可以通过因特网发布自己的作品、重要信息和进行网络贸易等,但是随之而出现的问题也十分严重:如作品侵权更加容易,篡改也更加方便。
计算机和通信网技术的发展与普及,数字音像制品以及其他电子出版物的传播和交易变得越来越便捷,但随之而来的侵权盗版活动也呈日益猖獗之势。
因此如何既充分利用因特网的便利,又能有效地保护知识产权,已受到人们的高度重视。
信息隐藏技术作为网络安全技术的一个重要新兴课题,内容涉及数据隐藏、保密通信、密码学等相关学科领域,作为隐蔽通信和知识产权保护等的主要手段,正得到广泛的研究与应用。
为了打击犯罪,一方面要通过立法来加强对知识产权的保护,另一方面必须要有先进的技术手段来保障法律的实施。
信息隐藏技术以其特有的优势,引起了人们的好奇和关注。
人们首先想到的就是在数字产品中藏入版权信息和产品序列号,某件数字产品中的版权信息表示版权的所有者,它可以作为侵权诉讼中的证据,而为每件产品编配的唯一产品序列号可以用来识别购买者,从而为追查盗版者提供线索。
此外,保密通信、电子商务以及国家安全等方面的应用需求也推动了信息隐藏研究工作的开展。
中国自古就有这样的谚语,叫做“耳听是虚,眼见为实”,“百闻不如一见”,英语中也有“Seeing is believing”的说法。
这些都表明人们往往过分相信自己的眼睛,而这正是信息隐藏技术得以存在和发展的重要基础,在这一研究领域,大量事实告诉人们:眼见不一定为实!1.2信息隐藏技术的发展1.2.1历史上的隐写术现代信息隐藏技术是由古老的隐写术(Steganography)发展而来的,隐写术一词来源于希腊语,其对应的英文意思是“Covered writing”。
一.数字水印数字水印技术数字水印技术(Digital Watermark):技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。
目前主要有两类数字水印,一类是空间数字水印,另一类是频率数字水印。
空间数字水印的典型代表是最低有效位(LSB)算法,其原理是通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素来表达水印的信息,以达到嵌入水印的目的。
频率数字水印的典型代表是扩展频谱算法,其原理是通过时频分析,根据扩展频谱特性,在数字图像的频率域上选择那些对视觉最敏感的部分,使修改后的系数隐含数字水印的信息。
可视密码技术二.可视密码技术:可视密码技术是Naor和Shamir于1994年首次提出的,其主要特点是恢复秘密图像时不需要任何复杂的密码学计算,而是以人的视觉即可将秘密图像辨别出来。
其做法是产生n张不具有任何意义的胶片,任取其中t张胶片叠合在一起即可还原出隐藏在其中的秘密信息。
其后,人们又对该方案进行了改进和发展。
主要的改进办法办法有:使产生的n张胶片都有一定的意义,这样做更具有迷惑性;改进了相关集合的造方法;将针对黑白图像的可视秘密共享扩展到基于灰度和彩色图像的可视秘密共享。
三.数字水印(Digital Watermark或称Steganography)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。
数字水印是信息隐藏技术的一个重要研究方向。
数字水印技术源于开放的网络环境下保护多媒体版权的新型技术,它可验证数字产品的版权拥有者、识别销售商、购买者或提供关于数字产品内容的其他附加信息,并将这些信息以人眼不可见的形式嵌入在数字图像或视频序列中,用于确认数字产品的所有权和跟踪侵权行为。
除此之外,它在证据篡改鉴定,数字的分级访问,数据产品的跟踪和检测,商业视频广播和因特网数字媒体的服务付费,电子商务的认证鉴定,商务活动中的杜撰防伪等方面也具有十分广阔的应用前景。
清晰讲解LSB、MSB和⼤⼩端模式及⽹络字节序时隔⼀个⽉⼜回到了博客园写⽂章,很开⼼O(∩_∩)O~~今天在做需求的涉及到⼀个固件版本的概念,其中固件组的⼈谈到了版本号从MSB到LSB排列,检索查阅后将所得整理如下。
MSB、LSB?MSB(Most Significant Bit):最⾼有效位,⼆进制中代表最⾼值的⽐特位,这⼀位对数值的影响最⼤。
LSB(Least Significant Bit):最低有效位,⼆进制中代表最低值的⽐特位例如,在⼆进制的1001(⼗进制的9)中,最左边的“1”即是MSB对数值影响最⼤,从1到9的变化幅度。
⽽最右边的1是LSB因为仅会让数值产⽣8到9的变化。
总结:MSB指⼆进制中表⽰的最⾼有效位,LSB指数据的最低有效位,1(MSB)001(LSB)⼤⼩端模式?⼤端模式(Big-Endian):数据的⾼位字节放到内存的低地址端,低位字节放到内存的⾼地址端。
⼩端模式(Little-Endian):数据的低位字节放到内存的低地址端,⾼位字节放到内存的⾼地址端。
内存地址:它只是⼀个编号⽽已,代表⼀个内存空间。
那么这个空间是多⼤呢?原来在计算机中存储器的容量是以字节为基本单位的。
也就是说⼀个内存地址代表⼀个字节(8bit)的存储空间。
把数据放到内存中先放到低位地址编号在⽤⾼位地址编号。
如 0x0000-->0x0001-->0x0002-->0x0003⽰例:假如现在有⼀个32位int型数0x12345678。
上⾯讲到存储器已字节(8bit)为基本单位,那么32位的数在内存中就对应32/8=4,需要4个内存地址表⽰的内存空间去存储这个数据。
这个数的MSB为0x12,这个数的LSB 为0x78OP0表⽰⼀个32位数据的最⾼字节MSB(Most Significant Byte),使⽤OP3表⽰⼀个32位数据最低字节LSB(Least Significant Byte)。
lsb计算公式(二)lsb计算公式1. 公式一公式:LSB = V_max / (2^n - 1)其中,LSB为最小可测量量,V_max为电压满量程,n为ADC/DAC 的分辨率。
举例说明:假设一个ADC的分辨率为12位,即n=12,电压满量程为10V,则LSB = 10 / (2^12 - 1) ≈ 。
这意味着ADC可以测量的最小电压单位为。
2. 公式二公式:Value = LSB * Code其中,Value为实际物理量的值,LSB为最小可测量量,Code为ADC转换结果的代码。
举例说明:假设一个12位ADC测量到的转换结果为3456,根据上述公式,物理量的值 = * 3456 = 。
因此,该ADC测量到的物理量值约为。
3. 公式三公式:SNR = ( * n) + 3 + 10 * log10(BW)其中,SNR为信噪比,n为ADC的分辨率,BW为信号带宽。
举例说明:假设一个ADC的分辨率为12位,信号带宽为10 kHz,则SNR = ( * 12) + 3 + 10 * log ≈ dB。
这意味着在给定条件下,该ADC的信噪比为 dB。
4. 公式四公式:ENOB = (SNR - ) /其中,ENOB为有效位数,SNR为信噪比。
举例说明:假设一个ADC的信噪比为80 dB,则ENOB = (80 - ) / ≈ 。
这意味着该ADC的有效位数约为13位。
5. 公式五公式:DNL = (V_i - V_i-1) - LSB其中,DNL为差分非线性,V_i为第i个ADC转换结果对应的物理量,LSB为最小可测量量。
举例说明:假设一个ADC的最小可测量量为,测量到的第i和i-1个转换结果对应的物理量分别为和,则DNL = ( - ) - = 。
这意味着该ADC的差分非线性为。
6. 公式六公式:INL = (V_i - V_ideal) / LSB其中,INL为积分非线性,V_i为第i个ADC转换结果对应的物理量,V_ideal为理想情况下的物理量,LSB为最小可测量量。
lsb计算公式(一)LSB计算公式1. 概述LSB(Least Significant Bit)计算公式是对于二进制数的最低有效位进行计算的一种方法。
它常被用在数字图像处理和数据隐藏领域,通过修改图像中像素的最低有效位,可以隐藏一些秘密信息。
2. 基本原理LSB计算公式的基本原理是将一个秘密信息的二进制表示嵌入到一个图像中。
图像的每个像素由RGB(红、绿、蓝)三个颜色通道的数值构成,而每个通道的数值又由一个8位的二进制数表示。
采用LSB 计算公式时,我们将秘密信息的二进制位依次替换掉像素中每个通道的最低有效位,从而不会对图像的视觉质量产生明显的影响。
3. 具体公式LSB计算公式是以二进制为基础的,其表示形式可以有多种。
以下是几个常见的LSB计算公式:•替换最低有效位为0这是最简单的LSB计算公式,将秘密信息的每个二进制位都替换为0。
该公式的计算方式如下:–对于每个像素的每个颜色通道:•将通道的最低有效位设置为0•替换最低有效位为1与上述公式相反,该公式将秘密信息的每个二进制位都替换为1。
具体计算方式如下:–对于每个像素的每个颜色通道:•将通道的最低有效位设置为1•替换最低有效位根据秘密信息这种公式会根据秘密信息的二进制位来决定是否替换最低有效位,可以根据需求进行灵活调整。
具体计算方式如下:–对于每个像素的每个颜色通道:•如果秘密信息的当前二进制位为1,将通道的最低有效位设置为1•如果秘密信息的当前二进制位为0,将通道的最低有效位设置为04. 举例说明为了更好地理解LSB计算公式的运作原理,下面以一个示例进行说明:假设有一副RGB图像中的某个像素,其三个颜色通道的数值分别为R=,G=,B=。
现在我们想要将一个秘密信息中的二进制位嵌入到该像素中。
使用LSB计算公式“替换最低有效位为0”,将秘密信息的二进制位依次替换掉像素中每个通道的最低有效位,得到新的像素值为 R=,G=,B=。
在这个例子中,我们将秘密信息的二进制位都设置为0,不会对图像的视觉质量产生明显的影响。
实验4 LSB算法实现位图图像中的信息隐藏及提取马亮,njnu一、实验目的通过对LSB算法的编程实现,深入理解该算法的设计思想及其应用。
二、实验类型程序设计。
三、实验原理LSB是L.F.Turner和R.G.van Schyndel等人提出的一种典型的空间域信息隐藏算法。
考虑人视觉上的厄不可见性缺陷,信息一般嵌入到图像最不重要的像素位上,如最低几位。
利用LSB算法可以在8色、16色、256色以及24位真彩色图像中隐藏信息。
对于256色图像,在不考虑压缩的情况下,每个字节存放一个像素点,那么一个像素点至少可以隐藏1位信息,一张640*480像素的256色图像至少可隐藏640*480=307200位(38400字节)的信息。
对于真彩色图像,同样可以按照如上的方法计算可以隐藏的信息量。
四、实验环境(1)系统环境:CPU:Inter® Core™2(2)开发环境:IDE:Microsoft Visual Studio 2005Language:Microsoft C#五、实验内容在上述系统环境和开发环境中编程实现LSB算法,包括信息的隐藏和提取。
六、程序说明(1)程序运行界面如下图所示:图1 信息隐藏界面图2 信息提取界面(2)程序功能说明➢自动计算最大隐藏信息量并给出提示➢可以在24位位图中隐藏大小不超过最大隐藏信息量的任意类型文件➢自动备份原始图片➢自动检测伪装图片中是否包含隐藏信息➢正确提取出LSB中的隐藏信息并还原出文件七、实现过程(1)LSBEncrypt类该类用于实现LSB的信息嵌入算法,类中各字段及方法说明如下:字段private string _originalPicPath 原始图片路径private string _hidingInfoPath 隐藏信息路径private FileStream _picStream 原始图片的文件流private FileStream _infoStream 隐藏信息的文件流方法➢private void HideInfoLength();输入:无输出:无功能:将图像的第55至第66字节的LSB替换为隐藏信息文件的长度➢private void HideInfoContent();输入:无输出:无功能:将隐藏信息以每3个字节写入原始图像从第67字节开始的每12字节块的LSB中➢private byte[] ConvertToBinaryArray(long x);输入:long x 要转换的长整型数,这个数的大小不会超过2的24次方输出:byte[] 二进制表示的字节数组功能:将长整型数转换为24位二进制表示的字节数组➢private byte[] ConvertToBinaryArray(byte[] array);输入:byte[] array 长度为3的字节数组输出:byte[] 二进制表示的字节数组功能:将隐藏信息以每3个字节写入原始图像从第67字节开始的每12字节块的LSB中➢public void ExecuteEncrypt();输入:无输出:无功能:执行信息隐藏操作(2)LSBDecrypt类该类用于实现LSB的信息提取算法,类中各字段及方法说明如下:字段private string _camouflagePicPath 伪装图片的路径private string _infoSavePath 还原出的隐藏信息的保存路径private FileStream _camouflageStream 伪装图片的文件流private FileStream _infoSaveStream 还原出的隐藏信息的文件流方法➢private int GetInfoLength();输入:无输出:int 隐藏信息长度功能:从伪装图片的第55至第66字节中提取出隐藏信息的长度➢private byte[] ExtractHidingBits(byte[] arr);输入:byte[] arr 长度为12的字节数组,含有隐藏信息输出:byte[] 从12字节块中提取出的3字节隐藏信息功能:利用位操作提取伪装文件流中每12字节的LSB位➢public bool ExecuteDecrypt();输入:无输出:bool 执行成功返回true,失败返回false功能:执行信息提取操作八、实验小结及思考(1)程序测试✧信息隐藏载体位图图像:图3 载体图像要隐藏的信息:图4 待隐藏的信息执行信息隐藏算法:图 5 隐藏信息成功信息隐藏选择伪装图片和还原出的隐藏信息的保存路径:图 6 信息提取还原出的文本文件test.txt:图7 还原出的文件(2)实验思考在信息隐藏的研究中,主要研究信息隐藏算法与隐蔽通信。
基于LSB图像隐藏和解密算法深度讲解 本⼈错误之处,欢迎指正。
LSB(LeastSignificant Bits)加密算法:将秘密信息嵌⼊到载体图像像素值的最低有效位,也称最不显著位,改变这⼀位置对载体图像的品质影响最⼩。
普及⼀下常识:RGB图像,蓝⾊,红⾊,绿⾊混合⽽成的彩⾊图像,读取后由三个⼋位m*n的矩阵组成,m*n代表图像的⼤⼩,也就是像素的多少,⼋位指的是⼀个像素占了⼋位⼆进制的⼤⼩,转为⼗进制也就是0-255。
最低有效位是低四位,本系统使⽤低四位进⾏储存数据。
本次仿真实验通过MATALB进⾏仿真,并且只分析灰⾊图像,原因是因为彩⾊图像是三个灰度图像代表了三种颜⾊混合⽽成。
编写两个界⾯,如下图所⽰: 本次讲解给出的代码加密算法代码和解密算法代码,涉及到的界⾯算法不与给出和解释。
算法思想:1,读⼊⼀个m*n的灰度图像,把每⼀位的像素的低四位⽤或运算清0,得到我称之为的“载体图像”。
2,读⼊信息图像,也就是需要隐藏的图像(也可以是其他的信息),将图像的⼋位拆开成⾼四位和低四位。
3,在载体前6个的低四位数据中,放⼊信息图像的⼤⼩信息。
3,按照先⾼后低的顺序,存⼊载体图像,先从左到右,再换下⼀⾏。
4,解密⽆⾮就是上⾯步骤的逆序⽽已。
看完思想后,⼀般情况下就可以⾃⼰尝试写程序了,其实⽤C语⾔对位操作更加⽅便,但是,考虑到需要显⽰图⽚,所以决定使⽤MATLAB进⾏仿真。
此处只提供加密和解密的算法,供需要的⼈学习,界⾯只是单纯的调⽤,所以在这没必要介绍。
%%%%%%%%%加密算法%%%%%%%%%%%clc;close all;clear;Inimage=imread('2222.jpg');Inimage=rgb2gray(Inimage);%真彩转灰度imwrite(Inimage,'car.jpg');figure(1);subplot(221),imshow(Inimage);title('原图');carrierl=bitand(Inimage,240);%清空低四位subplot(222),imshow(carrierl),title('清空低四位');%读取信息%text=158;text=imread('mess3.jpg');text=rgb2gray(text);imwrite(text,'messss.jpg');subplot(223),imshow(text),title('信息图');textu8=uint8(text);%读取输⼊图⽚的⼤⼩[m,n]=size(Inimage);m=double(m);n=double(n);%清空低四位数据after=carrierl;%读取信息⼤⼩[m1,n1]=size(textu8);%计数器count=1;count=double(count);%前六位⽤来放信息⼤⼩的信息m1,n1bit4=m1;%提出⾼⾼四位hhtext=bitand(bit4,3840);%右移⼋位位hhtext=bitshift(hhtext,-8);%提出⾼四位hightext4=bitand(bit4,240);%右移四位hightext4=bitshift(hightext4,-4);%提出低四位lowtext=bitand(bit4,15);%计算第⼏⾏locationy=ceil(count/n);%计算第⼏列locationx=count-(locationy-1)*n;%放⼊⾼四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),hhtext); count=count+1;%计算第⼏⾏locationy=ceil(count/n);%计算第⼏列locationx=count-(locationy-1)*n;%放⼊⾼四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),hightext4); count=count+1;locationy=ceil(count/n);locationx=count-(locationy-1)*n;%放⼊低四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),lowtext); %计数count=count+1;bit4=n1;%提出⾼⾼四位hhtext=bitand(bit4,3840);%右移⼋位位hhtext=bitshift(hhtext,-8);%提出⾼四位hightext4=bitand(bit4,240);%右移四位hightext4=bitshift(hightext4,-4);%提出低四位lowtext=bitand(bit4,15);%计算第⼏⾏locationy=ceil(count/n);%计算第⼏列locationx=count-(locationy-1)*n;%放⼊⾼四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),hhtext); count=count+1;%计算第⼏⾏locationy=ceil(count/n);%计算第⼏列locationx=count-(locationy-1)*n;%放⼊⾼四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),hightext4); count=count+1;locationy=ceil(count/n);locationx=count-(locationy-1)*n;%放⼊低四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),lowtext); %计数count=count+1;%开始载⼊数据for i=1:m1for j=1:n1bit4=textu8(i,j);%提出⾼四位hightext4=bitand(bit4,240);%右移四位hightext4=bitshift(hightext4,-4);%提出低四位lowtext=bitand(bit4,15);%计算第⼏⾏locationy=ceil(count/n);%计算第⼏列locationx=count-(locationy-1)*n;%放⼊⾼四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),hightext4); %计数count=count+1;locationy=ceil(count/n);locationx=count-(locationy-1)*n;%放⼊低四位after(locationy,locationx)=bitor(carrierl(locationy,locationx),lowtext); %计数count=count+1;endendsubplot(224),imshow(after),title('载⼊信息后');%保存图⽚,为tif格式⽆损耗imwrite(after,'after.tif');capity=num2str(m*n+4);messc=num2str(m1*n1);xlabel(['总像素容量为:',capity,';载体信息⼤⼩为',messc],'Color','b'); %%%%%%%%解密算法%%%%%%%%%%%%%clc;clear;close all;Inimage2=imread('after.tif');figure(1);subplot(221),imshow(Inimage2);title('原图'); %%%%%%读取图⽚的⼤⼩信息%%%%%%%提取⾼⾼四位m1hh=bitand(Inimage2(1,1),15);%提取⾼四位m1high=bitand(Inimage2(1,2),15);%提取低四位m1low=bitand(Inimage2(1,3),15);%⾼四位左移m1high=bitshift(m1high,4);%⾼⾼四位左移⼋位m1hh=double(m1hh);m1hh2=bitshift(m1hh,8);%合成数据m1=double(m1high+m1low)+m1hh2;%提取⾼⾼四位n1hh=bitand(Inimage2(1,4),15);%提取⾼四位n1high=bitand(Inimage2(1,5),15);%提取低四位n1low=bitand(Inimage2(1,6),15);%⾼四位左移n1high=bitshift(n1high,4);%⾼⾼四位左移⼋位n1hh=double(n1hh);n1hh=bitshift(n1hh,8);%合成数据n1=double(n1high+n1low)+n1hh;m1=double(m1);n1=double(n1);%%%%%%%开始读出数据,⽣成图⽚%%%%% %⽣成2个空⽩矩阵messagehigh=zeros(m1,n1);messagelow=zeros(m1,n1);result=zeros(m1,n1);%载体⼤⼩[m,n]=size(Inimage2);%初始化数值count=1;oddc=0;evenc=0;for i=1:mfor j=1:n%信息读取结束⾃动跳出if count==m1*n1*2+4break;%前四位已经读取elseif(count>6)dataout=bitand(Inimage2(i,j),15);locount=count-6;if rem(locount,2)==0evenc=evenc+1;%计算第⼏⾏locationy=ceil(evenc/n1);%计算第⼏列locationx=evenc-(locationy-1)*n1; messagelow(locationy,locationx)=dataout;elseoddc=oddc+1;%计算第⼏⾏locationy=ceil(oddc/n1);%计算第⼏列locationx=oddc-(locationy-1)*n1; messagehigh(locationy,locationx)=dataout;endendcount=count+1;endendfor i=1:m1for j=1:n1messagehigh(i,j)=bitshift(messagehigh(i,j),4); result(i,j)=bitor( messagehigh(i,j),messagelow(i,j)); endendcompare=imread('mess2.jpg');compare=rgb2gray(compare);result=uint8(result);subplot(222),imshow(result);title('结果');subplot(223),imshow(compare);title('信息'); compare=imread('mess.jpg');compare=rgb2gray(compare);。
lsb计算公式
LSB(Least Significant Bit)计算公式是一种计算二进制补码
的方法。
在计算机中,数值以二进制补码的形式存储,而LSB是指二
进制数中的最低位。
要计算一个负数的数值,可以使用以下公式:
-先将负数的绝对值转换为二进制形式;
-然后取二进制形式中的最低位;
-如果最低位为1,则将其取反为0,如果最低位为0,则保持不变;
-接下来,按照二进制补码的规则,将所有的位取反,并在最高位
加1。
例如,要计算-6的二进制补码,首先将6转换为二进制形式:6
的二进制为0110。
然后取最低位0,保持不变。
再将所有位取反,得到反码为1001。
最后,在反码的基础上加1,得到补码为1010,即-6的二进制补码。
除了LSB计算公式,还有其他一些与二进制相关的计算方法,例如计算机中常用的补码运算、移位操作和位运算等。
对于拓展,我们还可以讨论如何使用LSB计算公式进行数据隐藏和提取。
在数据隐藏中,可以通过改变输入数据的最低位来隐藏一些信息。
而在数据提取中,通过读取输入数据的最低位,可以提取出之前隐藏的信息。
这种方法常用于信息安全和隐写术领域。
lsb替换算法
摘要:
1.LSB 替换算法的概述
2.LSB 替换算法的原理
3.LSB 替换算法的优缺点
4.LSB 替换算法的应用实例
正文:
1.LSB 替换算法的概述
LSB(Least Significant Bit,最低有效位)替换算法是一种常见的数字隐写技术,用于在图像、音频等多媒体文件中隐藏信息。
这种技术通过替换原始文件中最不重要的位(即最低有效位)来实现信息的隐藏,从而在不破坏原始文件外观的情况下实现信息的传递。
2.LSB 替换算法的原理
LSB 替换算法的原理是将秘密信息的每个比特替换到原始文件中数据的最低有效位。
由于最低有效位对原始文件的影响较小,所以这种替换不会对原始文件的质量造成明显的损失。
在接收端,通过相同的算法将隐藏在最低有效位的信息提取出来,从而实现信息的传递。
3.LSB 替换算法的优缺点
LSB 替换算法的优点包括:
(1)隐藏信息的效果较好,不易被察觉;
(2)适用于多种类型的文件,如图像、音频等;
(3)算法简单,实现容易。
缺点包括:
(1)随着信息量的增加,需要的替换次数也增加,可能会影响原始文件的质量;
(2)对抗攻击的能力较弱,容易被恶意攻击者发现并破解。