案例内容:

编写程序,通过按位异或运算,实现图像加密与解密。

案例原理:

        对于数据a、数据b进行异或运算,得到数据c。即:

        a xor b = c

        此时有:

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

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

        对应到图像上,对于原始图像a,密钥图像b进行按位异或运算,得到加密图像c,若加密图像c与密钥图像b进行按位异或运算,会得到原始图像a。反之,若加密图像c与原始图像a进行按位异或运算,会得到密钥图像b。

重点代码:

result = cv2.bitwise_xor(origin, key)

输出图像result,表示图像origin与图像key进行按位异或运算的结果。

代码实现:

在代码最开始,需要导入cv2库与numpy库,随后读取原始图像,获取原始图像的相关信息。即:

import numpy as np
import cv2
img = cv2.imread("lena.jpg", 0)
r, c = img.shape

在具体实现过程中,双方可以协商预先确定一副密钥图像K。本例使用随机数生成了一副图像作为密钥,即:

key = np.random.randint(0,256,size=[r, c], dtype=np.uint8)

获得密钥图像后,将原始图像与密钥图像进行按位异或运算,得到加密图像,即:

result = cv2.bitwise_xor(img, key)

将加密图像与密钥图像进行按位异或运算,得到原始图像,即:

img1 = cv2.bitwise_xor(result, key)

最后进行结果展示:

cv2.imshow("img", img)
cv2.imshow("key", key)
cv2.imshow("result", result)
cv2.imshow("img1", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

最终代码为:

#======导入库======
import numpy as np
import cv2
#======读取原始图像======
img = cv2.imread("lena.jpg",0)
r,c=img.shape
#======图像加密与解密======
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)  #生成密钥图像
result = cv2.bitwise_xor(img, key)                      #进行图像加密
img1 = cv2.bitwise_xor(result, key)                     #进行图像解密
#======结果展示======
cv2.imshow("key",key)   
cv2.imshow("result",result)
cv2.imshow("img1",img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果为:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐