前言:
此时兄弟们对“xor运算法则”大约比较关切,兄弟们都想要分析一些“xor运算法则”的相关文章。那么小编同时在网络上搜集了一些关于“xor运算法则””的相关文章,希望同学们能喜欢,朋友们一起来学习一下吧!按位异或
要实现图像的加密与解密,我们首先需要掌握数学中的按位异或计算方式。
异或运算也叫半加运算,其运算法则与不带进位的二进制加法类似。在python中,通过“^”符号进行异或计算。下面,博主专门列出一个表格详解按位异或运算:
算数1
算数2
结果
python代码
0
0
0
0^0
0
1
1
0^1
1
0
1
1^0
1
1
0
1^1
简单的概括按位异或运算的规则是:相同的两个数运算为0,不同两个数运算为1。按位异或不仅仅用于图像的加密与解密,而且可以通过它统计不相同的数。
什么是图像的加密与解密
图像的加密定义:通过对原始图像与密钥图像进行按位异或运算。
图像的解密定义:将加密后的图像与密钥图像在次进行按位异或运算。
从图像的加密与解密可以看出来,它们都是同一种运算。
我们现在规定异或的文字符号为xor,根据上述按位异或运算,我们假设:
xor(a,b)=c
则可以得到:
xor(c,b)=a
亦或者:
xor(c,a)=b
综上所述,我们假设a为原始的图像数据,b为密钥,那么通过xor(a,c)计算出来的c就是加密后的密文。简单的概括加密与解密。
加密过程:将图像a与密钥b进行按位异或运算,完成加密,得到密文c。
解密过程:将密文c与密钥b进行按位异或运算,完成解密,得到图像a。
将图像加密
既然我们完全掌握了图像加密与解密的原理,下面我们通过代码来实现一个图像的加密。同样的,这里我们先获取一个灰度图像。
import cv2import numpy as npimg = cv2.imread("4.jpg", 0)r, c = img.shapekey = np.random.randint(0, 256, size=[r, c], dtype=np.uint8)encryption = cv2.bitwise_xor(img, key)cv2.imshow("111", encryption)cv2.waitKey()cv2.destroyAllWindows()
运行之后,我们会得到乱码图像:
将图像解密
将图像解密通过是通过按位异或运算,这里我们只需要用加密后的图像与key进行按位异或即可,完整代码如下所示:
import cv2import numpy as npimg = cv2.imread("4.jpg", 0)r, c = img.shapekey = np.random.randint(0, 256, size=[r, c], dtype=np.uint8)encryption = cv2.bitwise_xor(img, key)decryption = cv2.bitwise_xor(encryption, key)cv2.imshow("111", encryption)cv2.imshow("222", decryption )cv2.waitKey()cv2.destroyAllWindows()
运行之后,我们即可得到原图与加密图像:
标签: #xor运算法则