Python3 图片隐写术
admin
2023-07-30 21:42:38
0

先看看下面两张图,有什么差别。

看不出来吧?其实右图中隐藏了一段文字,只是通过一般手段无法察觉,需要编码才能破解,这就用到了一种黑科技——隐写术。

隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。

这是维基百科中对隐写术的简介。

隐写技术是信息隐藏技术中很重要的一种技术,它以图像、文本、音频、视频等数字媒体作为载体,将秘密信息嵌入到原始载体,并以不引起第三方注意的方式在公共信道上传输。如果说加密技术是保护消息的内容,那么数字隐写技术就是隐藏消息的存在。

作为不可信网络环境中的一种新型保密通信手段,隐写术在学术界和国防安全领域受到了普遍关注。

通过这个教程带你走入隐写术的大门。

教程是由FrostSigh发布在实验楼,完整教程及在线练习地址:Python3 图片隐写术

项目名称:

Python3图片隐写术

项目简介:

通过Python3实现将关键信息隐藏在图片的效果,主要目的是为了不让预期接收者以外的人知晓传递的内容。与电视剧中使用特殊墨水传递信息一样,表面看就是一张什么都没写的白纸,实则暗藏着重要信息。

项目效果图:

可以看到“施法”前后的图片肉眼看不出区别,然而图片却真实的隐藏了一些数据在里面。


隐藏的文字

涉及知识点:

  • Pillow 模块
  • 最低有效位
  • lambda 表达式递归
  • UTF-8 编码

实验原理:

还是引用 wikipedia 的解释:

载体文件(cover file)相对隐秘文件的大小(指数据含量,以比特计)越大,隐藏后者就越加容易。

因为这个原因,数字图像(包含有大量的数据)在因特网和其他传媒上被广泛用于隐藏消息。这种方法使用的广泛程度无从查考。例如:一个24位的位图中的每个像素的三个颜色分量(红,绿和蓝)各使用8个比特来表示。如果我们只考虑蓝色的话,就是说有2^8种不同的数值来表示深浅不同的蓝色。而像11111111和11111110这两个值所表示的蓝色,人眼几乎无法区分。因此,这个最低有效位就可以用来存储颜色之外的信息,而且在某种程度上几乎是检测不到的。如果对红色和绿色进行同样的操作,就可以在差不多三个像素中存储一个字节的信息。

更正式一点地说,使隐写的信息难以探测的,也就是保证“有效载荷”(需要被隐蔽的信号)对“载体”(即原始的信号)的调制对载体的影响看起来(理想状况下甚至在统计上)可以忽略。这就是说,这种改变应该无法与载体中的噪声加以区别。

(从信息论的观点来看,这就是说信道的容量必须大于传输“表面上”的信号的需求。这就叫做信道的冗余。对于一幅数字图像,这种冗余可能是成像单元的噪声;对于数字音频,可能是录音或者放大设备所产生的噪声。任何有着模拟放大级的系统都会有所谓的热噪声(或称“1/f”噪声),这可以用作掩饰。另外,有损压缩技术(如JPEG)会在解压后的数据中引入一些误差,利用这些误差作隐写术用途也是可能的。)

隐写术也可以用作数字水印,这里一条消息(往往只是一个标识符)被隐藏到一幅图像中,使得其来源能够被跟踪或校验。

总而言之,这个教程便是利用图片四个颜色分量(rgba)的最低有效位(英语:Least Significant Bit,lsb)来隐藏信息(本实验隐藏的是文字)

实现步骤

这个项目教程,通过4个步骤来教你完全了解图片的隐写术原理:

  • 安装开发所需要的包:实验中会用到 Pillow ,所以需要安装 Pillow 依赖包;
  • 编码:将隐藏信息编码到图片中;
  • 解码:将接收到的图片进行解码,识别所隐藏的信息;
  • 测试:项目的最后,当时是需要进行测试咯,看看是否可以准确的识别出图片所隐藏的信息;

关于项目的项目开发文档、代码、步骤等,点击这里即可进行查看啦。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...