win10+Python3.7.3+OpenCV3.4.1入门学习(三)————3.5图像加密和解密

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm

通过按位异或运算可以实现图像的加密和解密。
通过对原始图像与密钥图像进行按位异或,可以实现加密;将加密后的图像与密钥图像再次进行按位异或,可以实现解密。按位异或运算的基本规则下表所示。

算子1算子2结果规则
000xor(0,0)=0
010xor(0,1)=1
100xor(1,0)=1
111xor(1,1)=0

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

xor(a, b)=c

则可以得到:

 xor(c, b)=a
 xor(c, a)=b

上述运算的过程如下表所示。

abc(xor(a,b))xor(c,b) (=a)xor(c,a) (=b)
00000
01101
10110
11011

从上述结果可以看出,如果上述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

以二进制形式表示的具体细节如下:
● 加密过程

运算说明二进制值十进制值
bit_xor明文1101 1000216
bit_xor密钥1011 0010178
运算结果密文0110 1010106

● 解密过程

运算说明二进制值十进制值
bit_xor密文0110 1010106
bit_xor密钥1011 0010178
运算结果明文1101 1000216

对图像内的每一个像素点重复上述操作,即可完成对图像的加密、解密操作

eg:编写程序,通到图像按位异或实现加密和解密过程。
在具体实现中,甲乙双方可以通过协商预先确定一幅密钥图像,并且双方各保存一份备用。在此基础上,甲乙双方就可以利用该密钥图像进行图像的加密和解密处理了。例如,甲通过密钥对原始图像加密后,原始图像变得杂乱无章,其他人无法解读图像内容。而乙可以通过预先保存的密钥图像,将加密图像解密,获取原始图像内容。
在加密过程中,可以选择一幅有意义的图像作为密钥,也可以选择一幅没有意义的图像作为密钥。在本例中,将随机生成一幅图像作为密钥。
代码如下:

#异或加密解密
import cv2
import numpy as np
lena=cv2.imread("lena.bmp",0)
r,c=lena.shape
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。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值