LSB 中文名字全称为最低有效位。

常见的信息隐藏图片格式一般为png或者bmp这类无损压缩的图片且是8位图或者24位图,8位图是使用我们的调色板

来保存颜色值,可以正好代表2的8次方256种颜色。8位即占一个字节,24位图及占3字节,我们用r,g,b来表示。
对于这些字节的最后一位我们无论其是0或者1,这于这张照片的显示来说,我们从肉眼是分辨不出来的(实际上,最后3位我们都可以进行改变且我们同样从肉眼看不出其变化,甚至最后5位,6位的改变我们都可以看出图片的大致样子,也就是说最低有效位,我们隐藏的信息是可以放到每个像素字节的后3位,不仅仅是最后一位


下面给出8位bmp格式图片的lsb隐藏及提取代码

-----------------------------------------------------------------------------------------------------------------------------------------

隐藏代码:

 
from PIL import Imageimport binasciifrom operator import mod#提取隐藏的图片的每位像素信息def puthide():	hide = Image.open(r"F:xinxi\lsb\hide.bmp")#将路径换了,这是我们需要隐藏的图片	c,d=hide.size	#print hide.getpixel((0,1))	m=''	for i in range(c):		for j in range(d):		#print hide.getpixel((i,j))			#获取字节(这里是8位图)变为8位二进制连接起来			m=m+str(bin(hide.getpixel((i,j))).lstrip('0b')).zfill(8)	return mif __name__=='__main__':	s=puthide()	num=0	image=Image.open("F:xinxi\lsb\lena.bmp")#这里是在读取将要隐藏信息的图片载体	a,b=image.size	if a*b<len(s):#我们这里只把字节最后一位用来隐藏		print "the picture is too big"	for i in range(a):		for j in range(b):			if(num==len(s)):				break			#获取每一像素的字节(返回的是对于int型 如字节对应00000011 返回的就是3)			a=image.getpixel((i,j))			a=a-mod(a,2)+int(s[num])#将最后一位进行改变			image.putpixel((i,j),a)#重新把字节最后一位已经插入信息插回像素对应位置			num+=1	image.save(r"F:xinxi\lsb\water.bmp")#保存

 

 

提取代码:

 
from PIL import Imageimport binasciifrom operator import modif __name__=='__main__':	#这里需要注意实际上我是知道我隐藏的那张图片规格的,如果不知道,我是无法正确还原,因为我不知道        #具体图像像素如何分布      img=Image.new("L",(267,107))#新建一张和我隐藏图片一样大的图片	hideimage = Image.open("F:xinxi\lsb\water.bmp")#载入已经隐藏信息的图片	c,d=img.size	a,b=hideimage.size	num=0	m=""	s=[]	for q in range(a):		for p in range(b):			#将隐藏信息的图片每像素的字节最后一位提取			m=m+str(mod(hideimage.getpixel((q,p)),2))			num+=1			#每8位就进行一次计算,算出其对应8位二进制对应得10进制数字			if(num==8):				m="0b"+m				s.append(eval(m))#进行计算,并保存至一个list里面				num=0				m=""	count=0	print len(s)	for i in range(c):		for j in range(d):			if(count==len(s)):				break			#循环将每一个数字重新插回新建的图片中对元素图片进行还原			img.putpixel((i,j),s[count])			count+=1	img.save(r"F:xinxi\lsb\back.bmp")#保存图片


 

 

上面代码需要结合自己想要隐藏的图片信息进行相应改动(要缩进好),道理是一样的。

LSB是最基本空间域隐藏方法,实际过程中可以结合比如将需要隐藏的图片进行预先处理,同时将信息不用从头至尾,从上至下来来隐藏等操作来进行更好的隐藏。



更多相关文章

  1. python 3.3 爬虫之爬取图片
  2. 使用python将图片转换为字符图片
  3. python使用多进程爬取图片
  4. 怎样用Python3 写一个爬图片的程序?
  5. wxPython 显示一张图片
  6. 学习Python爬虫(五):爬取图片
  7. 【Python】python3实现网页爬虫下载图片
  8. 如何发送一个字节(或字节)来测试在我的应用程序中监听的套接字?
  9. 嵌入式linux 字节对齐 导致输出Alignment trap

随机推荐

  1. 那些年收藏的技术文章(一)-CSDN篇
  2. Android短信----发送流程---框架层(Framew
  3. Android_day04
  4. CSDN 很经典的博客 您值得一览
  5. qt for android
  6. Android(安卓)资源获取
  7. 【翻译】(1)Android NDK Overview
  8. Mono for Android试用体验
  9. android布局属性之margin
  10. 自定义组件