使用 Python 的图像隐写术

重磅干货,第一时间送达

今天,世界正在见证前所未有的数据爆炸,我们每天产生的数据量确实令人难以置信。福布斯的文章“我们每天创造多少数据?” 指出,以我们目前的速度每天创建大约2.5 千亿字节的数据,但随着物联网 (IoT) 的发展,这一速度只会加快。仅在过去两年中,世界上 90% 的数据都是生成的,这篇值得重读!

现代计算世界围绕着数据这个词,但到底是什么让人如此感兴趣呢?在当今世界,企业已经开始意识到数据就是力量,因为它可以预测客户趋势、增加销售额,并将公司推向新的高度。随着技术的快速进步和数据不断创新,数据安全已成为我们的首要任务。随着每天数以千计的消息和数据在互联网上从一个地方传输到另一个地方,数据共享正在增加,数据的保护是发送者的主要关注点,我们必须以只有接收者才能理解的秘密方式对消息进行加密,这一点非常重要。

在本文中,我们将了解什么是最低有效位隐写术,以及我们如何使用 python 实现它。

什么是隐写术?

隐写术是将秘密信息隐藏在更大的信息中的过程,使人无法知道隐藏信息的存在或内容。隐写术的目的是保持双方之间的秘密通信,与隐藏秘密消息内容的密码学不同,隐写术隐藏了消息传递这一事实。虽然隐写术不同于密码术,但两者之间有很多类比,一些作者将隐写术归类为密码术的一种形式,因为隐藏通信是一种秘密通信。

使用隐写术优于加密术?

到目前为止,密码学一直在保护发送者和预期接收者之间的机密性方面发挥着最终作用。然而,如今除了密码学之外,隐写术被越来越多地用于为隐藏数据添加更多保护层。与单独使用密码学相比,使用隐写术的优势在于,预期的秘密消息本身不会引起人们的注意,不会成为审查的对象。显而易见的加密消息,无论它们多么牢不可破,都会引起人们的兴趣,并且在加密是非法的国家,这些信息本身可能会被指控有罪。[1]

隐写术的类型

隐写术工作已在不同的传输媒体上进行,如图像、视频、文本或音频。

基本隐写模型

如上图所示,需要隐藏的原始图像文件 (X) 和秘密消息 (M) 都作为输入输入到隐写编码器中,隐写编码器函数 f(X,M,K) 通过使用最低有效位编码等技术将秘密消息嵌入到封面图像文件中,生成的隐藏图像看起来与封面图像文件非常相似,没有明显的变化,这样就完成了编码。为了检索秘密消息,隐写对象被输入到隐写解码器中。[3]

本文将帮助我们使用 Python 实现图像隐写术,它将帮助我们编写 Python 代码,使用一种称为最低有效位的技术隐藏文本消息。

最低有效位隐写术

我们可以将数字图像描述为一组有限的数字值,称为像素。像素是图像中最小的单个元素,其值表示给定颜色在任何特定点的亮度。因此,我们可以将图像视为包含固定行数和列数的像素矩阵(或二维数组)。

最低有效位 (LSB) 是一种技术,其中每个像素的最后一位被修改并替换为秘密消息的数据位。

从上图可以清楚地看出,如果我们改变 MSB 会对最终值产生更大的影响,但如果我们改变 LSB 对最终值的影响很小,因此我们使用最低有效位隐写术。

LSB 技术是如何工作的?

每个像素包含红、绿、蓝三个值,这些值的范围是 0 到 255,换句话说,它们是 8 位值。[4]

让我们举一个例子来说明这项技术的工作原理,假设我们想将消息“ hi ”隐藏到具有以下像素值的4x4图像中:

[(225, 12, 99), (155, 2, 50), (99, 51, 15), (15, 55, 22),(155, 61, 87), (63, 30, 17), (1, 55, 19), (99, 81, 66),(219, 77, 91), (69, 39, 50), (18, 200, 33), (25, 54, 190)]

使用ASCII 表,我们可以将秘密消息转换为十进制值,然后转换为二进制值:0110100 0110101。现在,我们逐个迭代像素值,在将其转换为二进制后,我们将每个最低有效位依次替换为该消息位(例如 225 是 11100001,我们用第一个数据位(0)等替换最后一位,右边的位(1),依此类推)。这只会将像素值修改为 +1 或 -1,这根本不明显。执行LSBS后得到的像素值如下图:

[(224, 13, 99),(154, 3, 50),(98, 50, 15),(15, 54, 23),(154, 61, 87),(63, 30, 17),( 1, 55, 19),(99, 81, 66),(219, 77, 91),(69, 39, 50),(18, 200, 33),(25, 54, 190)]

使用 Python 在图像中隐藏文本

在本节中,我们可以找到使用 Python 代码一步一步地隐藏和显示过程,打开一个google collab笔记本并按照以下步骤操作:

在开始编写代码之前,我们可以使用左侧菜单栏中显示的上传选项上传我们想用于隐写术的图像(png)。

第 1 步:导入所有必需的 Python 库

第 2 步:定义一个将任意类型数据转换为二进制的函数,我们将在编码和解码阶段使用该函数来将秘密数据和像素值转换为二进制。

第 3 步:编写一个函数,通过改变 LSB 将秘密信息隐藏到图像中

第 4 步:定义一个函数,用于解码隐藏图像中的隐藏消息

第 5 步:该函数将输入的图像名称和秘密消息作为用户的输入,并调用 hideData() 对消息进行编码

第6步:创建一个函数,让用户输入需要解码的图片名称,调用showData()函数返回解码后的信息

第 7 步:主函数()

结果:

对消息进行编码:

解码消息:

如果小伙伴们对代码感兴趣,可以在Github上找到我的笔记本。

参考:

[1].https://towardsdatascience.com/steganography-hiding-an-image-inside-another-77ca66b2acb1

[2].https://www.edureka.co/blog/steganography-tutorial

[3].https://www.forbes.com/sites/bernardmarr/2018/05/21/how-much-data-do-we-create-every-day-the-mind-blowing-stats-everyone-should-read/#191d0b0160ba

[4].https://www.ukessays.com/essays/computer-science/steganography-uses-methods-tools-3250.php

[5].https://www.thepythoncode.com/article/hide-secret-data-in-images-using-steganography-python

[6].https://www.youtube.com/watch?v=xepNoHgNj0w&t=1922s

Github代码连接:
https://github.com/rroy1212/Image_Steganography/blob/master/ImageSteganography.ipynb
下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐

  • 【上岗证】CT成像原理

    一.Lambert Beer定律 1.根据Lambert Beer定律,单能X线通过匀质物体的衰减方式是 A.指数衰减 B.常数衰减 C.强度减弱 D.傅里叶变换 E.函数衰减. 答案:A 2.CT成 ...

  • Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略

    Py之cv2:cv2库(OpenCV,opencv-python)的简介.安装.使用方法(常见函数.方法等)最强详细攻略 相关文章: Py之cv2:cv2库(OpenCV)的简介.安装.使用方法(常见 ...

  • 十行代码,用Python做一个迷你版的美图秀秀

    原创 菜鸟哥 菜鸟学Python 2020-02-26 美图秀秀相信大家都不陌生,大家只要操作美图秀秀,就可以P掉图片中脸上的一些瑕疵,让人变得更加的美丽.今天小编就带领大家来借助Python和Fla ...

  • python+opencv图像处理(二十二)

    中值滤波 中值滤波是比较常用的一种图像平滑处理方法. 其基本思路是通过滤波器遍历图像,取滤波器区域像素值中值为新的像素值. 表示为数学表达式如下: 其中,f(x,y)和g(x,y)分别是原图像和处理后 ...

  • HALCON 20.11:深度学习笔记(9)

    HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何使用基于深度学习的异常检测. 通过异常检测,我们想要检测图像是否包含异常.异常指的是偏离常规的.未知的东西. 异常检测的例子:输 ...

  • Python|加权平均法读取灰度化图像介

    问题描述灰度化的原理时假定每个像素点的三通道值相同,并用统一的灰度值待代替.加权平均法读取灰度化图像时,是将三个通道的通道值进行加权,然后用来代替灰度.实际中加权平均法RGB灰度化的公式为: 式中表示 ...

  • 用Python进行图像模糊处理和特征提取

    原文链接:http://tecdat.cn/?p=9015 在本文中,我将带您了解图像处理的一些基本功能.特征提取.但是这里我们需要更深入的数据清理.但是数据清理是在数据集,表格,文本等上完成的.如何 ...

  • Python处理图像五个有趣场景,很实用!

    好奇心Log 6天前 以下文章来源于Python大数据分析 ,作者有派君 Python大数据分析分享python编程.可视化设计.大数据分析.机器学习等技术以及数据分析案例,包括但不限于pandas. ...

  • 基于Python查找图像中最常见的颜色

    重磅干货,第一时间送达 01. 准备工作 02. 常用方法 img_temp = img.copy()img_temp[:,:,0], img_temp[:,:,1], img_temp[:,:,2] ...

  • 基于Pyhton的图像隐写术--如何隐藏图像中的数据

    重磅干货,第一时间送达 隐秘术是在任何文件中隐藏秘密数据的艺术.秘密数据可以是任何格式的数据,例如文本,甚至是文件.简而言之,隐写术的主要目的是在任何文件(通常是图像,音频或视频)中隐藏预期的信息,而 ...

  • Python实现图像的全景拼接

    基本介绍 图像的全景拼接,即"缝合"两张具有重叠区域的图来创建一张全景图.其中用到了计算机视觉和图像处理技术有:关键点特征检测.局部不变特征.关键特征点匹配.RANSAC(Rand ...

  • Python之数据分析(三维立体图像、极坐标系、半对数坐标)

    文章目录 写在前面: 一.三维立体图像 1.三维线框 2.三维曲面 3.三维散点 二.极坐标系 三.半对数坐标 写在前面: import numpy as np import matplotlib.p ...

  • [Python图像处理] 八.图像腐蚀与图像膨胀

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  • 使用Python中的OpenCV降噪功能增强图像的3个步骤

    重磅干货,第一时间送达 在本文中,我们将展示如何通过三个简单的步骤来实现降噪.我们将使用机器学习训练的降噪模型.这是我们找到的最好的降噪模型之一. 程序可以判断图像是否有噪点吗?这对于另一个项目可能是 ...

  • python保存生成的图像的方法

    这篇文章将为大家详细讲解有关python保存生成的图像的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获. python中保存图片的方法: 1.使用io模块的ims ...