使用 Python 进行基于图像的隐写术?

pythonserver side programmingprogramming

隐写术是一种将信息隐藏在幕后的技术。它不像密码学那样专注于加密数据(通过不同的算法,如 SHA1、MD5 等),隐写术更侧重于将数据(数据可以是文件、图像、消息或视频)隐藏在另一个文件、图像、消息或视频中,以避免任何干扰。

因此,我们将尝试创建一个简单的 Python 程序,将信息隐藏在图像后面,而不会对图像的外观产生明显变化。该程序有两个主要部分 - 第一个是解码函数,可以从图像文件中提取秘密信息,第二个是编码函数,将秘密消息编码到图像中。

我们使用 Python Pillow 库来实现此目的(您也可以使用 openCv 或其他库☺)。您可以使用 pip 安装它,只需在命令提示符中运行 pip install pillow:

$pip install pillow

像素和颜色模型的基本概念:

像素是图像中最小的单个元素。因此,每个像素代表原始图像的一部分。这意味着,像素越高,实际图片的表示就越高或越准确。

在黑白图像(不是灰度)中,黑色像素的值为 1,白色像素的值为 0。而在彩色图像中,它们有三个主要颜色成分(RGB-红色、绿色、蓝色),每个像素的像素值为 0-255。因此,像素 (255, 255, 255) 表示白色,而 (0,0,0) 表示黑色。由于 8 位二进制数可以表示的最大数为 255,因此我们可以得到的最大数就是 255。

由于二进制数的基数为 2,因此我们可以非常轻松地将二进制数转换为十进制数。假设我们的二进制数为 01010101,则其等效十进制数(基数为 10)为:

26 +24 + 22 + 20 = 64 + 16 + 4 + 1 = 85

您也可以在 Python 终端中测试上述 – 二进制到十进制的转换。

>>> print(0b01010101)
85
>>> type(0b01010101)
<class 'int'>
>>> 0b01010101
85
>>> 0b01010110
86

我们将如何实现它:

步骤 1:导入所需的库/包。
步骤 2:打开文件或图像
步骤 3:将一些文本编码到源图像中并保存。
步骤 4:检查两幅图像(有和没有隐藏数据文件),看看是否有任何可见的变化。
步骤 5:解码图像 - 从图像中提取数据

上述步骤的实施:

示例代码

>>> #导入所需库
>>> #Import the required library
>>> from PIL import Image
>>>

我已使用 stepic 库进行编码和解码。您可以使用 pip 安装 stepic 库:

>>> #打开要隐藏数据的图像或文件
>>> im = Image.open('TajMahal.png')
>>>
>>> #将一些文本编码到图像文件中并将其保存在另一个文件中
>>> im1 = stepic.encode(im, b'Hello Python')
>>> im1.save('TajMahal.png', 'PNG')
>>>
>>> #现在是检查两幅图像并查看是否有任何明显变化的时候了
>>> im1 = Image.open('TajMahal.png')
>>> im1.show()

带有隐藏文本的图像:

实际图像:
>>> im.show()
>>>'

>>>
>>> #解码图像以便从图像中提取隐藏的数据
>>> im2 = Image.open('TajMahal.png')
>>> stegoImage = stepic.decode(im2)
>>> stegoImage
'Hello Python'

因此我们看到将文本隐藏在图像后面是多么容易。您可以使用其他输入项(例如视频)或其他格式(例如 jpeg),也可以使用其他库来获得相同的结果,祝您使用 Python 实现快乐隐写术 ☺。


相关文章