opencv-14 图像加密和解密

在OpenCV中,图像加密和解密是通过对图像像素进行一系列的变换和操作来实现的
通过按位异或运算可以实现图像的加密和解密。

通过对原始图像与密钥图像进行按位异或 ,可以实现加密;将加密后的图像与密钥图像再次进行按位异或,可以实现解密。

按位异或运算的基本规则如表 3-15 所示。

根据上述按位异或运算的规则,假设:

xor(a,b)=c

则可以得到:

xor(c,b)=a

xor(c,a)=b

上述运算的过程如表 3-16 所示

从上述结果可以看出,如果上述 a、b、c 具有如下关系:

 a:明文,原始数据。

 b:密钥。

 c:密文,通过 xor(a,b)实现。

则可以对上述数据进行如下操作和理解。

 加密过程:将明文 a 与密钥 b 进行按位异或,完成加密,得到密文 c。

 解密过程:将密文 c 与密钥 b 进行按位异或,完成解密,得到明文 a。

位运算是指针对二进制位进行的运算,利用位运算即可实现对像素点的加密。在图像处理中,需要处理的像素点的值通常为灰度值,其范围通常为[0,255]。

例如,某个像素点的值为 216(明文),则可以使用 178(该数值由加密者自由选定)作为密钥对其进行加密,让这两个数的二进制值进行按位异或运算,即完成加密,得到一个密文 106。当需要解密时,将密文 106 与密钥 178 进行按位异或运算,即可得到原始像素点值 216(明文)。具体过程为:

bit_xor(216,178)=106

bit_xor(106,178)=216

以二进制形式表示的具体细节如下。

对图像内的每一个像素点重复上述操作,即可完成对图像的加密、解密操作。这里以一个原始图像 O 为例,具体说明图像的加密、解密过程。

1.加密过程

假设有需要加密的原始图像 O,其中的像素值为:

选定的加密密钥图像为 K,其中的像素值为:

图像 O 所对应的二进制表示 OB 为

密钥图像 K 所对应的二进制表示 KB 为:

将 OB 与 KB 进行按位异或运算,即得到图像 O 的加密图像 OSB:

OSB 转换为十进制形式 OS,如下:

至此,图像 O 的加密过程完成,得到原始图像 O 的加密图像 OS。

2.解密过程

解密过程需要将加密图像 OS 与密钥图像 K 进行按位异或运算,得到原图像 OR。

将加密图像 OS 的二进制形式 OSB 与密钥图像 K 的二进制形式 KB 进行按位异或运算,

即得到原始图像 OR 的二进制形式 ORB。按照上述运算,得到的 ORB 为:

ORB 转换为十进制形式,得到解密图像 OR,如下:

至此,图像的解密过程结束,得到加密图像 OS 的解密图像 OR。

从上述过程可以看到,解密过程所得到的解密图像 OR 与原始图像 O 是一致的。这说明上

述加密、解密过程是正确的。

上述说明过程中,为了方便理解和观察数据的运算,在进行按位运算时,我们都是将十进

制数转换为二进制数后,再进行位运算处理的。实际上,在使用 OpenCV 编写程序时,不需要

这样转换,OpenCV 中位运算函数的参数是十进制数,位运算函数会直接对十进制参数进行按位异或运算。

实验1 - 对图片加密解密:

python 复制代码
import cv2
import numpy as np
lena=cv2.imread("lena.png",0)
r,c=lena.shape
#生成密钥,随机生成一个和lena大小一样的矩阵
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)
#对图片进行加密
encryption=cv2.bitwise_xor(lena,key)

#对图片进行解密
decryption=cv2.bitwise_xor(encryption,key)
cv2.imshow("lena",lena)
cv2.imshow("key",key)
cv2.imshow("encryption",encryption)
cv2.imshow("decryption",decryption)
cv2.waitKey()
cv2.destroyAllWindows()

运行效果:

本例的各个图像关系如下。

 图像 lena 是明文(原始)图像,是需要加密的图像,从当前目录下读入。

 图像 key 是密钥图像,是加密和解密过程中所使用的密钥,该图像是由随机数生成的。

 图像 encryption 是加密图像,是明文图像 lena 和密钥图像 key 通过按位异或运算得到的。

 图像 decryption 是解密图像,是加密图像 encryption 和密钥图像 key 通过按位异或运算

得到的。

运行上述程序,结果如图所示,其中:

 图(a)是原始图像 lena。

 图(b)是密钥图像 key。

 图©是原始图像 lena(图(a))借助密钥 key(图(b))加密得到的加密图像 encryption。

 图(d)是对加密图像 encryption(图©)使用密钥图像 key(图(b))解密得到的解密图像

decryption。

相关推荐
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条1 小时前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
18号房客1 小时前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn
feifeikon1 小时前
机器学习DAY3 : 线性回归与最小二乘法与sklearn实现 (线性回归完)
人工智能·机器学习·线性回归
游客5201 小时前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(2)
人工智能·机器学习·sklearn
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
咸鱼桨2 小时前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派
强哥之神2 小时前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai
yusaisai大鱼2 小时前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow