3.7图像的加密和解密
通过按位异或运算可以实现图像的加密和解密
通过原始图像与秘钥图像进行按位异或,可以实现加密;将加密后的图像与密钥图像再异或可以实现解密。
加密过程:
原始图像O 加密密钥图像K
| 202 | 120 | 30 | 156 | 15 | 212 | 223 | 71 | |
| 249 | 25 | 23 | 190 | 183 | 6 | 30 | 235 | |
| 238 | 1 | 198 | 150 | 218 | 18 | 157 | 172 | |
| 6 | 21 | 65 | 24 | 4 | 178 | 95 | 154 |
原始图像所对应的二进制OB 加密图像所对应的二进制KB
| 11001010 | 01111000 | 00011110 | 10011100 | 异或 | 00001111 | 11010100 | 11011111 | 01000111 |
| 11111001 | 00011001 | 00010111 | 10111110 | 10110111 | 00000110 | 00011110 | 11101011 | |
| 11101110 | 00000001 | 11000110 | 10010110 | 11011010 | 00010010 | 10011101 | 10101100 | |
| 00000110 | 00010101 | 01000001 | 00011000 | 00000100 | 10110010 | 01011111 | 10011010 |
OB与KB按位异或得到的图像OSB:
| 1100 0101 | 1010 1100 | 1100 0001 | 1101 1011 |
| 0100 1110 | 0001 1111 | 0000 1001 | 0101 0101 |
| 0011 0100 | 0001 0011 | 0101 1011 | 0011 1010 |
| 0000 0010 | 1010 0111 | 0001 1110 | 1000 0010 |
OSB转换成十进制OS:
| 197 | 172 | 193 | 219 |
| 78 | 31 | 9 | 85 |
| 52 | 19 | 91 | 58 |
| 2 | 167 | 30 | 130 |
解密过程:
解密过程需要将加密图像OSB与密钥图像KB进行按位异或运算,即得到原始图像OR的二进制形式ORB。
| OSB | 1100 0101 | 1010 1100 | 1100 0001 | 1101 1011 |
| 0100 1110 | 0001 1111 | 0000 1001 | 0101 0101 | |
| 0011 0100 | 0001 0011 | 0101 1011 | 0011 1010 | |
| 0000 0010 | 1010 0111 | 0001 1110 | 1000 0010 | |
| KB | 00001111 | 11010100 | 11011111 | 01000111 |
| 10110111 | 00000110 | 00011110 | 11101011 | |
| 11011010 | 00010010 | 10011101 | 10101100 | |
| 00000100 | 10110010 | 01011111 | 10011010 |
| ORB | 11001010 | 01111000 | 00011110 | 10011100 |
| 11111001 | 00011001 | 00010111 | 10111110 | |
| 11101110 | 00000001 | 11000110 | 10010110 | |
| 00000110 | 00010101 | 01000001 | 00011000 | |
| OR | 202 | 120 | 30 | 156 |
| 249 | 25 | 23 | 190 | |
| 238 | 1 | 198 | 150 | |
| 6 | 21 | 65 | 24 |
#3.14编写程序,通到图像按位异或实现加密和解密过程
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()

