通过按位异或运算就可以实现图像的加密与解密。加密:原始图像与秘钥图像按位异或运算。解密:将加密后的图像与秘钥图像进行按位异或,可以实现解密。
[TOC]
基本原理
异或运算是一种半加运算。只加不进。
在二进制中,体现的就是xor(1,1) = 0
案例说明
这里,借用一本书上的例子进行讲解。
首先是加密过程:
197 | 172 | 193 | 219 |
---|---|---|---|
78 | 31 | 9 | 85 |
52 | 19 | 91 | 58 |
2 | 167 | 30 | 130 |
解密过程类似,这里不再赘述。
实战演示
例: 甲方和乙方秘密写上一个计划,以一张图片的形式传递消息,只有双方有秘钥。现假设你窃取了原图和秘钥,请你对其加密和解密。
import cv2
import numpy as np
mimi = cv2.imread('mimi.jpg', 0) # 原图
r, c = mimi.shape
key = np.random.randint(0, 256, size=[r, c], dtype=np.uint8) # 秘钥
jiami = cv2.bitwise_xor(mimi, key)
jiemi = cv2.bitwise_xor(jiami, key)
cv2.imshow('yuantu', mimi)
cv2.imshow('key', key)
cv2.imshow('jiami', jiami)
cv2.imshow('jiemi', jiemi)
cv2.waitKey()
效果:
素材:mimi.jpg