基于图像的隐写术使用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,所以这是我们可以达到的最大值。

由于二进制数的基数是2,我们可以很容易地将二进制数转换为十进制数。例如,我们的二进制数是01010101,那么它等效的十进制数(基数10)将是

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

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

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

我们将如何实现它

Step 1: Import the required library/package.
Step 2: Open the file or Image
Step 3: Encode some text into the source Image & then save it.
Step 4: Check both the images (with and without hidden data file) and see if there is any visible changes.
Step 5: Decode the image- to extract data from the image

上述步骤的实现

示例代码

>>> #Import the required library
>>> from PIL import Image
>>> import stepic
>>>

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

>>> #Open Image or file in which you want to hide your data
>>> im = Image.open('TajMahal.png')
>>>
>>> #Encode some text into your Image file and save it in another file
>>> im1 = stepic.encode(im, b'Hello Python')
>>> im1.save('TajMahal.png', 'PNG')
>>>
>>> #Now is the time to check both images and see if there is any visible changes
>>> im1 = Image.open('TajMahal.png')
>>> im1.show()

包含隐藏文本的图像

Actual image:
>>> im.show()
>>>'

>>>
>>> #Decode the image so as to extract the hidden data from the image
>>> im2 = Image.open('TajMahal.png')
>>> stegoImage = stepic.decode(im2)
>>> stegoImage
'Hello Python'

我们可以看到,在图像中隐藏文本是多么容易。你可以使用其他输入项,例如视频或其他格式,例如jpeg,并且可以使用其他库来获得相同的结果。祝你使用Python进行隐写术愉快☺。

更新于:2019年7月30日

737 次浏览

启动你的职业生涯

通过完成课程获得认证

开始
广告