BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #15948同步于 2008/2/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

来show一下我的信息隐藏脚本

wks
2008/2/17镜像同步5 回复
信息隐藏技术只在信息安全课上听过,以前从来没有用过真的软件。假期学习了Python语言,发现这个语言的标准库非常强大,很容易可以完成很多高级的功能(图像处理还是需要第三方的扩展库)。于是,花了一点时间练习一下,实现这个技术。 我的思路就是老师讲的常用方法:将信息隐藏在一幅图片(位图)的每个像素每种颜色的低比特中。由于人的眼睛对微小的颜色变化不敏感,直接观察图片是无法看出其中的信息的。 具体实现:图像中,每个像素分成红绿蓝三种颜色,每个颜色的强度用8比特存储,一个像素就是24比特。我在这24比特中隐藏8比特的信息:红色和蓝色分别3比特,绿色2比特(因为人眼对绿色比较敏感),都用最低比特位。数据从图像左上角开始,逐行存储。前4个像素储存被隐藏的数据的长度(这也就限制了被隐藏的数据不能超过2的32次方字节,但是世界上真的有那么大的图片吗?),然后每个比特按被隐藏数据的顺序逐字节存储。解码时相反,先获得信息长度,再提取数据。 这个脚本是用Python语言做的,Linux系统一般会自带解释器。需要python-imaging库(也叫PIL,Python Imaging Library)。Windows可以去www.python.org下载Python,去www.pythonware.com下载PIL。 初学者的作品,欢迎拍砖。 使用方法(设程序名为infohide.py): 当前目录有lena.tif,data.txt 隐藏信息: ./infohide.py -e lena.tif data.txt hidden.png 提取信息: ./infohide.py -d hidden.png output.txt 一些限制: 输入图像格式,很多,只要PIL认识都行,如gif,jpg,png,tiff等 输出格式是PNG,因为需要无损的格式,否则隐藏的信息会有损失 算法可能不好,速度有点慢。 附带一张Lena的照片用来作实验。 附件(768.1KB) lena_std.tif 代码: #!/usr/bin/python import sys import Image usage="""USAGE: encode: infohide.py -e source_image secret_data output_image_with_data decode: infohide.py -d image_with_data output_data """ def encode(imgFileName,dataFileName,outFileName): """Hide file (dataFileName) into image (imgFileName), write output to outFileName.""" try: dataContent=open(dataFileName,"rb").read() except IOError: print "Cannot open data file",dataFileName,"!" exit() try: img=Image.open(imgFileName).convert(mode="RGB") except IOError: print "Cannot open image file",imgFileName,"!" exit() # Since one pixel hides one byte, image may not be big enough. if len(dataContent) > img.size[0]*img.size[1] - 4: print "Image too small to hold data!" exit() # Convert data into low-bits of each pixel. # Each pixel has R,G,B color, each 8 bits. dataPixTable=[(val>>5,(val>>3)&3,val&7) \ for val in [ord(x) for x in dataContent]] # Insert the length of data before all data. # This length is recorded in 4 bytes (4 pixels). dataPixTable[:0]=[(val>>5,(val>>3)&3,val&7) \ for val in [(len(dataContent)>>(8*x))&255 for x in range(4)]] # Convert image into a list of (R,G,B) tuples. imgData=list(img.getdata())[:len(dataPixTable)] # Write data into image low-bits for i,dpix in enumerate(dataPixTable): imgData[i]=(imgData[i][0]&(~7)|dpix[0], imgData[i][1]&(~3)|dpix[1], imgData[i][2]&(~7)|dpix[2]) # Write into image and write output file. img.putdata(imgData) img.save(outFileName,"PNG") def decode(imgFileName,outFileName): """Restore hidden data from imgFileName, write into outFileName.""" try: img=Image.open(imgFileName) except IOError: print "Cannot open source image",imgFileName,"!" exit() imgData=list(img.getdata()) # Find out the length of hidden data. lenDecode=[((a&7)<<5)|((b&3)<<3)|(c&7) for (a,b,c) in imgData[:4]] dataLen=sum([x<<(8*ind) for (ind,x) in enumerate(lenDecode)]) if dataLen > len(imgData)-4: print "This image may not hide any data!" exit() # Extract data dataDecode=[((a&7)<<5)|((b&3)<<3)|(c&7) \ for (a,b,c) in imgData[4:dataLen+4]] data="".join([chr(x) for x in dataDecode]) open(outFileName,"wb").write(data) if len(sys.argv) == 1: print usage exit() elif sys.argv[1]=="-e" and len(sys.argv)==5: encode(sys.argv[2],sys.argv[3],sys.argv[4]) elif sys.argv[1]=="-d" and len(sys.argv)==4: decode(sys.argv[2],sys.argv[3]) else: print usage exit()
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
flyingkisser机器人#1 · 2008/2/19
支持原创,加精! 【 在 wks (cloverprince) 的大作中提到: 】 : 信息隐藏技术只在信息安全课上听过,以前从来没有用过真的软件。假期学习了Python语言,发现这个语言的标准库非常强大,很容易可以完成很多高级的功能(图像处理还是需要第三方的扩展库)。于是,花了一点时间练习一下,实现这个技术。 : 我的思路就是老师讲的常用方法:将信息隐藏在一幅图片(位图)的每个像素每种颜色的低比特中。由于人的眼睛对微小的颜色变化不敏感,直接观察图片是无法看出其中的信息的。 : 具体实现:图像中,每个像素分成红绿蓝三种颜色,每个颜色的强度用8比特存储,一个像素就是24比特。我在这24比特中隐藏8比特的信息:红色和蓝色分别3比特,绿色2比特(因为人眼对绿色比较敏感),都用最低比特位。数据从图像左上角开始,逐行存储。前4个像素储存被隐藏� : ...................
Fee机器人#2 · 2008/2/20
Python的~看不太懂~呵呵~
BookMoth机器人#3 · 2008/2/20
还是matlab的imread()看着比较爽。。。。。。 你们老师没给你讲这种隐藏方法,加大了最低bit信息的随机性,可以通过卡方分析的方法(RS算法)预测隐藏的信息量了? 继续写个RS检测算法吧~~~
congxin机器人#4 · 2008/2/24
晕,卡方检验和RS分析是不同的算法 【 在 BookMoth 的大作中提到: 】 : 还是matlab的imread()看着比较爽。。。。。。 : 你们老师没给你讲这种隐藏方法,加大了最低bit信息的随机性,可以通过卡方分析的方法(RS算法)预测隐藏的信息量了? : 继续写个RS检测算法吧~~~
BookMoth机器人#5 · 2008/2/25
嗯……我没学好。对不起老师啊。哪个老师教的来着…… 【 在 congxin 的大作中提到: 】 : 晕,卡方检验和RS分析是不同的算法