Steganography-图片隐写术

Steganography-图片隐写术

今天做DAM的作业,做到图片水印的时候,想起来当初小调同学把言页之庭的种子通过图片发给我。看到下面这个新闻真是觉得碉堡了!!技术宅又一次可以成功而隐晦的表白了!!哈哈哈!!

http://war.163.com/10/0712/17/6BDLNUB90001123L.html

下面分享以下自己用python实现的隐写术,后面如果有时间会再更深入研究一下解码的问题!!

基本思路是:

1.每张图片都有RGB三个通道,每个像素点的值为3个8位的R/G/B值。

2.把每个RGB值的最后两位&11111100(0xFC)移掉,因为最后两位对图片的影响不大,肉眼基本不可见

3.把要隐藏的图片的RGB值都除以85(255/3=85),这样正好可以通过2bits(00-11,0-3)来表示图片

4.把得到的值填到之前的2个空bit中

5.等解码的时候只要把之前在原图中藏进去的2位提取出来(&0x3)再*85就可以得到原图信息

还有一种方法是把信息写道Alpha通道里并按RBG格式编码,解码时用L格式。

但是图片会失真一点,因为毕竟相比8位的存储,2位的存储信息会少很多,但是却已经可以看到80%的图片信息了。所以不得不再赞一下二八法则,20%的编码信息里存储了80%的图片信息啊。

import Image,ImageChops

def waterMark(originFile,markFile):
    origin = Image.open(originFile)
    mark = Image.open(markFile)
    size = mark.size #record the original size of the marked image
    mark = mark.resize(origin.size) #set the pics in same size

    origin.load();
    mark.load()
    source1=origin.split() #split the pic in 3 channel
    source2=mark.split()

    image=[(),(),()]
    waterMark=[(),(),()]
    for x in [0,1,2]: #loop in 3 channel, RGB
        image[x]=source1[x].point(lambda i:i & 0xFC) #remove the last 2 bits of the original image, 0xFC=11111100
        waterMark[x]=source2[x].point(lambda i:i/85) #reduce the RGB value of each channel, 255/3=85

    mark=Image.merge("RGB",waterMark)
    origin=Image.merge("RGB",image)

    result=ImageChops.add(mark,origin)

    return result,size

def deCode(waterMark,size):
    #waterMark=Image.open(waterMark)
    waterMark.load()
    source = waterMark.split()
    originSize=size
    #print originSize

    mark=[(),(),()]
    for x in [0,1,2]:
        mark[x]=source[x].point(lambda i:(i & 0x3)*85) #get back the RGB value of the marked image

    result=Image.merge("RGB",mark)
    result = result.resize(originSize)

    return result

if __name__ == ‘__main__‘:
    img1,size = waterMark("avatar2.jpg","green.jpg")
    img2 = deCode(img1,size)

    img1.show() #original image with watermark
    img2.show() #embeded image
时间: 2024-12-26 18:00:48

Steganography-图片隐写术的相关文章

图片隐写术总结

一直比较喜欢做杂项(虽然还是很垃圾),就感觉很有意思.总结了一些关于图片隐写的姿势,一起学习~ 1.另存为图片 (还有直接看文件信息,可能就在文件信息里面)2.改后缀 zip / rar /txt3.扔winhex  这里要看文件头和文件结束的位置  Jpg文件头:FFD8FF,结尾都是FF D9  gif的开头是GIF8(47494638)  PNG (png),文件头:89504E47   ZIP Archive (zip),文件头:504B0304   RAR Archive (rar),

javascript图片隐写术,感觉可以用它来干点有想法的事情

1.什么是图片隐写术? 权威的wiki说法是“隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容.”,图片隐写术简而言之就是利用图片来隐藏某些数据,让人一眼看去以为是很普通很正常的图片,但其实里面隐藏着某些“机密”数据. 据传911事件里,KB份子就是通过黄色图片来传递信息而躲过了FBI的监控.还有大众点评也是通过图片隐写术来保护自身合法权益.所以图片隐写术是一个双刃剑,就看你用它做什么了. 比如下面这张图片: 看起来是一张很漂

图片隐写术(更新中…………)

1.F5图片隐写 先是用binwalk看了一下 -D=类型        -E 解压zip等 确定了没有后门,根据题目的提示,另外参考了P神的WriteUp,刷新的健应该是F5,也就是F5隐写. git clone https://github.com/matthewgao/F5-steganography 从这个github网站下载F5隐身的解密算法. cd F5-steganography java Extract ../123456.jpg -p 123456 在F5-steganogra

图片隐写术

常见的图片的二进制头文件开头 jpg格式的图片,以FFD8开头,以FFD9结尾. 通常会在图片里隐藏一些其他的奇奇怪怪的东西,比如另一张图片,也比如说zip包(顺便说一下,zip包的头文件格式为504B0304) 交flag的时候,有时候试着把flag反过来交,或许就对了呢 winhex和010 editor是很好用的二进制编辑器

前端的图片隐写术

最近同事告诉了一个叫千里码的网站,进去看了一下,感觉很不错,覆盖面挺广,题目也很有意思,也附带了相关的学习素材. 里面有一题隐写术的 http://www.qlcoder.com/task/7617 下面是一位大佬的解答 http://www.alloyteam.com/2016/03/image-steganography/

wechall.net/stegano 解题心得

最近迷上了 www.wechall.net 网站,里面都是些与计算机相关的题目挑战.题目又分很多类型,例如:加密与解密.隐写术.网络攻防.趣味编程.数学逻辑等.题目有的简单,有的很难,需要一些知识和技巧.与其他题目挑战的网站不同的是,在其他类似性质的网站注册的用户可以绑定到 WeChall 网站,然后 WeChall 提供排名信息,而且也分得很细,什么按总分全球排名.什么在自己国家的排名.什么解答某种语言网站题目的排名等.可以从解题的人数判断题目的难易程度,有兴趣的朋友可以去注册,解题中也能学到

0ops CTF/0CTF writeup

0×00 0CTF『第一届0ops信息安全技术挑战赛,即0ops Capture The Flag,以下简称0CTF. 0CTF由上海交通大学网络信息中心和上海市信息安全行业协会指导,由上海交通大学信息网络安全协会承办,是2014信息安全技能竞赛校园赛首站.0CTF注册与参赛地址为http://ctf.0ops.net. 比赛时间为北京时间2014年3月1日至2日,每天7时至23时,共32小时.』 看官方微博,这个比赛本来是面向上交校内的,就是校外可以做题但是不发奖,后来也给校外发奖了,整体感觉

Python之路【第二十四篇】:Python学习路径及练手项目合集

Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Python技术路径中包含入门知识.Python基础.Web框架.基础项目.网络编程.数据与计算.综合项目七个模块.路径中的教程将带你逐步深入,学会如何使用 Python 实现一个博客,桌面词典,微信机器人或网络安全软件等.完成本路径的基础及项目练习,将具备独立的Python开发能力. 完整的Python学

光棍节程序员闯关秀writeup

答题链接https://1111.segmentfault.com/ 第一关 首先当然是右键查看源码啊 点击链接进入下一关 第二关 还是老样子,右键查看源码 这个key是要放在URL链接里敲回车的 第三关 根据前两关这个难度,第三关估计在请求头或者响应头里,先开burp 刷新,拦截返回包 拿到flag 第四关 根据前几次规律,都是在改k的参数 对他进行MD5解码 明文是4,这又是第4关,猜测第五关是5的MD5 第五关 扫码,发现什么都没有 难倒是图片隐写术?上工具 得到key 第六关 给我的感觉