图像的加密和解密---OpenCV-Python开发指南(5)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 图像的加密和解密---OpenCV-Python开发指南(5)

按位异或


要实现图像的加密与解密,我们首先需要掌握数学中的按位异或计算方式。


异或运算也叫半加运算,其运算法则与不带进位的二进制加法类似。在python中,通过“^”符号进行异或计算。下面,博主专门列出一个表格详解按位异或运算:

算数1

算数2

结果

python代码

0

0

0

0^0

0

1

1

0^1

1

0

1

1^0

1

1

0

1^1

简单的概括按位异或运算的规则是:相同的两个数运算为0,不同两个数运算为1。按位异或不仅仅用于图像的加密与解密,而且可以通过它统计不相同的数。


什么是图像的加密与解密


图像的加密定义:通过对原始图像与密钥图像进行按位异或运算。


图像的解密定义:将加密后的图像与密钥图像在次进行按位异或运算。


从图像的加密与解密可以看出来,它们都是同一种运算。


我们现在规定异或的文字符号为xor,根据上述按位异或运算,我们假设:


xor(a,b)=c


则可以得到:


xor(c,b)=a


亦或者:


xor(c,a)=b


综上所述,我们假设a为原始的图像数据,b为密钥,那么通过xor(a,c)计算出来的c就是加密后的密文。简单的概括加密与解密。


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


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


将图像加密


既然我们完全掌握了图像加密与解密的原理,下面我们通过代码来实现一个图像的加密。同样的,这里我们先获取一个灰度图像。

import cv2
import numpy as np
img = cv2.imread("4.jpg", 0)
r, c = img.shape
key = np.random.randint(0, 256, size=[r, c], dtype=np.uint8)
encryption = cv2.bitwise_xor(img, key)
cv2.imshow("111", encryption)
cv2.waitKey()
cv2.destroyAllWindows()


运行之后,我们会得到乱码图像:


将图像解密


将图像解密通过是通过按位异或运算,这里我们只需要用加密后的图像与key进行按位异或即可,完整代码如下所示:

import cv2
import numpy as np
img = cv2.imread("4.jpg", 0)
r, c = img.shape
key = np.random.randint(0, 256, size=[r, c], dtype=np.uint8)
encryption = cv2.bitwise_xor(img, key)
decryption = cv2.bitwise_xor(encryption, key)
cv2.imshow("111", encryption)
cv2.imshow("222", decryption )
cv2.waitKey()
cv2.destroyAllWindows()


运行之后,我们即可得到原图与加密图像:

相关文章
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
523 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
15天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
93 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
2月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
56 3
|
2月前
|
JSON API 数据格式
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
57 0
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
|
2月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
155 1
|
2月前
|
存储 算法 安全
Python 加密算法详解与应用
Python 加密算法详解与应用
47 1
|
2月前
|
数据安全/隐私保护 Python
python学习十一:python常用模块使用,如 加密模块pyarmor,时间模块time等
这篇文章介绍了Python中两个常用模块的使用:加密模块pyarmor用于保护代码,以及时间模块time用于处理时间相关的功能。
90 0
|
2月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
108 0
|
2月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
128 0