Python图像识别-Opencv07 异或运算,图像加密

异或运算的基本规则

元素1 元素2 结果 规则
0 0 0 0 xor 0 = 0
0 1 1 0 xor 1 = 1
1 0 1 1 xor 0 = 1
1 1 0 1 xor 1 = 0

运算数相同,结果为0;运算数不同,结果为1。

任何数(0或1)与数值0异或,结果仍为自身。

任何数(0或1)与数值1异或,结果变为另外一个数。

如何数(0或1)与自身异或,结果为0。

根据上述异或运算规则,对数据a、数据b进行异或运算,可以得到数值c:

a xor b = c

c xor a = (a xor b) xor a = (a xor a) xor b = 0 xor b = b

c xor b = (a xor b) xor b = a xor (b xor b) = a xor 0 = a

因此,当上述a,b,c具有如下关系时:

a: 明文

b: 密钥

c: 密文,通过a xor b实现

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

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

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

位运算是针对二进制位进行的运算。按位异或是指将两个数值以二进制形式进行逐位异或运算。

利用按位异或可以实现对像素点的加密。在图像处理中,需要处理的像素点的像素值通常为灰度值,其范围通常为[0,255]。例如,某个像素点的像素值为216(明文),将数值178(该数值由加密者自由选定)作为密钥,让这两个数的二进制形式进行按位异或运算,即可完成加密,得到密文106。当需要解密时,将密文106与密钥178的二进制形式进行按位异或运算,即可得到原始像素点的像素值216(明文)。用bir_xor()表示按位异或,具体过程为

bit_xor(216,178) = 106

bit_xor(106,178) = 216

加密过程

运算 说明 二进制数 十进制数
bit_xor 明文 11011000 216
bit_xor 密钥 10110010 178
运算结果 密文 01101010 106

解密过程

运算 说明 二进制数 十进制数
bit_xor 密文 01101010 106
bit_xor 密钥 10110010 178
运算结果 明文 11011000 216

例如,甲乙双方可以通过协商预先确定一幅密钥图像K,双方各保存一份备用。在此基础上,甲乙双方利用密钥图像K可以进行图像的加密和解密处理。

例如,甲通过密钥图像K与原始图像O进行按位异或运算,得到加密图像S。加密图像S是杂乱无章的,其他人无法解读加密图像S内容。而乙可以将预先保存的密钥图像K与加密图像S进行按位异或运算,实现加密图像S的解密,获取原始图像O。

import cv2
import numpy as np

img = cv2.imread('D:/PixC/01.jpeg',0)
cv2.imshow('img',img)
print(img)
w,h = img.shape
key = np.random.randint(0,255,size = [w,h],dtype=np.uint8)
print(key)
cv2.imshow('key',key)

cv2.waitKey()
cv2.destroyAllWindows()

Python图像识别-Opencv07 异或运算,图像加密_第1张图片

加密后

encryption = cv.bitwise_xor(img,key)
decryption = cv.bitwise_xor(encryption,key)
cv2.imshow('encryption',encryption)
cv2.imshow('decryption',decryption)

 

你可能感兴趣的:(python-图像,python,开发语言)