python图片隐写_Lsb图片隐写

前言

在刚刚过去的网鼎杯第一场比赛中,做到了一道杂项题是关于lsb隐写的。LSB全称为 least significant bit,是最低有效位的意思。Lsb图片隐写是基于lsb算法的一种图片隐写术,以下统称为lsb隐写,这是一种常见的信息隐藏方法。当然关于图像的隐写的方法有很多,统称为隐写术,以后会写一篇总结这类隐写的文章。这里只把lsb隐写单独拿出来分析,因为lsb隐写很实用,算法简单,能存储的信息量也大,更何况是CTF比赛中的常客。还有一个原因是最近本人做的不少杂项题的坑都踩在了lsb隐写上(是我太菜了,大神莫笑。),所以发誓一定要把这类题搞清楚。

隐写术简介

先简单的讲讲什么是隐写。由于我们识别声音或图片的能力有限,因此稍微改动信息的某一位是不会影响我们识别声音或图片的。隐写和加密之间的相同点就是,都是需要经过特殊的处理才能获得特定的信息。它们之间的不同点简单的说就是,加密的话会是一些奇怪的字符,或数据。隐写的话,就是信息明明就在眼前,但是你却视而不见。古人的藏头诗也是隐写的一种啦。

Lsb隐写

其实吧一开始我是想把一大堆算法理论和公式摆上来讲讲lsb隐写是什么,但是想想,这种做法是真的可恶啊,摆明不想让人看嘛。所以我想先从一道例题出发,原理什么的将在这个过程中,细细地讲来。

先来看下面一张图,这道题来自实验吧(原题链接:http://www.shiyanbar.com/ctf/1897),题目名字叫--最低位的轻吻。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LSB(Least Significant Bit)是一种简单的图像隐写术,其原理是将需要隐藏的信息按照二进制的方式嵌入到图片的最低有效位,从而达到隐蔽的目的。下面是Python实现LSB原理的图像隐写的方法: 首先,我们需要安装Pillow库,它是Python图像处理库。 ```python pip install pillow ``` 接下来,我们需要导入Pillow库并打开需要进行隐写的图片: ```python from PIL import Image # 打开图片 im = Image.open("test.png") ``` 然后,我们需要将需要隐藏的信息转换为二进制,并将其嵌入到图片的最低有效位中: ```python # 将需要隐藏的信息转换为二进制 binary = ''.join(format(ord(i), '08b') for i in "Hello World") # 将信息嵌入到图片最低位中 pixels = im.load() width, height = im.size index = 0 for row in range(height): for col in range(width): r, g, b = pixels[col, row] if index < len(binary): pixels[col, row] = (r & 254 | int(binary[index]), g & 254 | int(binary[index + 1]), b & 252 | int(binary[index + 2])) index += 3 if index >= len(binary): break if index >= len(binary): break ``` 最后,我们需要保存修改后的图片: ```python # 保存图片 im.save("test_with_hidden_message.png") ``` 完整代码如下: ```python from PIL import Image # 打开图片 im = Image.open("test.png") # 将需要隐藏的信息转换为二进制 binary = ''.join(format(ord(i), '08b') for i in "Hello World") # 将信息嵌入到图片最低位中 pixels = im.load() width, height = im.size index = 0 for row in range(height): for col in range(width): r, g, b = pixels[col, row] if index < len(binary): pixels[col, row] = (r & 254 | int(binary[index]), g & 254 | int(binary[index + 1]), b & 252 | int(binary[index + 2])) index += 3 if index >= len(binary): break if index >= len(binary): break # 保存图片 im.save("test_with_hidden_message.png") ``` 注意:该方法只适用于隐写信息较少的情况,如果需要隐写大量信息,建议使用其他更加复杂的隐写算法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值