图像加密

2022-05-28 16:07:05 浏览数 (2)

代码语言: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。

注意:位运算是指针对二进制位进行的运算,利用位运算实现对像素点的加密。为了方便数据的运算,将十进制数转换为二进制数后,再进行位运算处理。

0 人点赞