python中Image库,LSB隐写,图片的色彩模式

LSB隐写(最低有效位的隐写),是指通过改变图片中像素的最低位来实现信息的隐藏的。这种隐写方式需要图片是无压缩的位图,因此一般用于bmppng图片。

这里有需要注意的是图片的色彩格式,常见的格式有 RGB,灰度,和CMYK。
对于RGB三原色格式来说,一个像素是由3个字节构成的,因此一个像素可以实现3位的信息隐藏。对于灰度格式,一个像素是由一个字节构成的,只能隐藏1位的信息。而对于CMKY,一个像素是由4个字节构成的。

那么如何判断一张图片是哪一种色彩模式呢?我们可以借助pyhon中PIL库来实现(仅支持到python2.7,后面创建了兼容python3.x的叫作pillow)。借助Image对象的mode属性来实现。网上对于rgb隐写有很多,下面给出一个对灰度图片隐写的例子来看看。
在这里插入图片描述
这张黑白图片叫作胜利之吻,下载下来是一张bmp的图片,感兴趣的可以去了解它的历史。题目的名字叫作最低位的亲吻,应该就和lsb隐写有关了。

下面给出提取信息的代码(pthon 2.7):

from PIL import Image
#得到Image对象
img = Image.open('1.bmp')
print img.mode #打印的结果为L,代表的是灰度图片
width,height = img.size #size属性返回的是一个元组,代表了宽和高各多少像素

for i in range(0,width):
	for j in range(0,height): 
		#根据(i,j)得到对应的像素点,对于rgb模式来说会得到一个三元组,
		#而对本例子中的灰度模式,打印的结果是一个整数,因为它只有一个字节
		dot = img.getpixel((i,j))
		print "原像素为",dot #可以发现结果是一个0~255的数
		if dot&0x1 == 0:
			#按位与操作提取出每个像素(一字节)最低位二进制,因为一位二进制
			#要么为0,要么为1,可以通过黑(0)白(255)的效果来分辨
			img.putpixel((x,y),0)
		else:
			img.putpixel((x,y),255)	
image.show()	

结果会得到一张二维码,即可得到flag.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值