使用 Python 进行基于图像的隐写术?
隐写术是一种将信息隐藏在幕后的技术。它不像密码学那样专注于加密数据(通过不同的算法,如 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 实现快乐隐写术 ☺。