基于图像的隐写术使用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进行隐写术愉快☺。