代码语言:javascript复制
import cv2
import numpy as np
lena=cv2.imread("C:/Users/xpp/Desktop/Lena.png",0)#明文:原始图像数据
r,c=lena.shape
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)#密钥:随机生成一幅图像作为密钥
encryption=cv2.bitwise_xor(lena,key)#加密:通过xor(明文,密钥)实现
decryption=cv2.bitwise_xor(encryption,key)#解密:通过xor(加密图像,密钥)实现
cv2.imshow("lena",lena)
cv2.imshow("key",key)
cv2.imshow("encryption",encryption)
cv2.imshow("decryption",decryption)
cv2.waitKey()
cv2.destroyAllWindows()
算法:通过对原始图像与密钥图像进行按位异或,实现加密,加密后的图像与密钥图像再次进行按位异或,实现解密。
根据按位异或运算规则,假设:
xor(a,b)=c
得到:
xor(c,b)=a
xor(c,a)=b
其中,a,b,c有如下关系:
- a:明文,原始图像数据;
- b:密钥;
- c:密文,通过xor(a,b)实现。
加密过程是将明文a与密钥b进行按位异或,完成加密,得到明文c。解密过程是将密文c与密钥b进行按位异或,完成解密,得到明文a。
注意:位运算是指针对二进制位进行的运算,利用位运算实现对像素点的加密。为了方便数据的运算,将十进制数转换为二进制数后,再进行位运算处理。