OpenCV-Python 개발 가이드 (5) --- 이미지 암호화 및 암호 해독

비트 XOR

이미지 암호화 및 복호화를 실현하려면 먼저 수학에서 비트 별 XOR 계산 방법을 마스터해야합니다.

배타적 또는 연산은 반 더하기 연산이라고도하며 그 알고리즘은 캐리가없는 이진 더하기와 유사합니다. 파이썬에서 XOR 계산은 "^"기호를 통해 수행됩니다. 아래에서 블로거는 비트 별 XOR 연산을 설명하는 테이블을 구체적으로 나열합니다.

수학 1 산수 2 결과 파이썬 코드
0 0 0 0 ^ 0
0 1 1 0 ^ 1
1 0 1 1 ^ 0
1 1 0 1 ^ 1

비트 별 XOR 연산 규칙에 대한 간단한 요약은 다음과 같습니다. 동일한 두 숫자는 0으로 작동하고 다른 두 숫자는 1로 작동합니다. Bitwise XOR은 이미지 암호화 및 복호화에 사용될뿐만 아니라 다른 숫자를 계산하는 데에도 사용할 수 있습니다.

이미지 암호화 및 암호 해독이란?

이미지 암호화의 정의 : 원본 이미지와 키 이미지의 비트 단위 XOR 연산을 통해.

이미지 복호화 정의 : 암호화 된 이미지와 키 이미지에 대해 비트 단위 XOR 연산을 수행합니다.

이미지 암호화 및 복호화에서 모두 동일한 작업임을 알 수 있습니다.

이제 XOR의 리터럴 기호가 xor라고 규정하고 위의 비트 별 XOR 연산에 따라 다음과 같이 가정합니다.

xor (a, b) = c

다음을 얻을 수 있습니다.

xor (c, b) = a

또는:

xor (c, a) = b

요약하면 a가 원본 이미지 데이터이고 b가 키라고 가정하고 xor (a, c)로 계산 된 c가 암호화 된 암호문이라고 가정합니다. 암호화 및 복호화를 간단히 요약하십시오.

암호화 프로세스 : 이미지 a와 키 b에 대해 비트 XOR 연산을 수행하여 암호화를 완료하고 암호문 c를 얻습니다.

복호화 프로세스 : 암호문 c와 키 b에 대해 비트 단위 XOR 연산을 수행하고 복호화를 완료하고 이미지 a를 가져옵니다.

이미지 암호화

이제 이미지 암호화 및 암호 해독의 원칙을 완전히 이해 했으므로 코드를 사용하여 이미지 암호화를 구현해 보겠습니다. 마찬가지로 여기서 먼저 회색조 이미지를 얻습니다.

import cv2
import numpy as np

img = cv2.imread("4.jpg", 0)
r, c = img.shape
key = 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()

실행 후 왜곡 된 이미지가 표시됩니다.
이미지 암호화

이미지 해독

이미지는 비트 XOR 연산을 통해 복호화됩니다. 여기서는 암호화 된 이미지와 키 사이에 비트 XOR 만 수행하면됩니다. 전체 코드는 다음과 같습니다.

import cv2
import numpy as np

img = cv2.imread("4.jpg", 0)
r, c = img.shape
key = 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()

실행 후 원본 이미지와 암호화 된 이미지를 가져올 수 있습니다.
원본 이미지와 암호화 된 이미지의 비교

추천

출처blog.csdn.net/liyuanjinglyj/article/details/113774344