OpenCV(5) --- Шифрование и дешифрование изображений

OpenCV
OpenCV(5) --- Шифрование и дешифрование изображений

Побитовое исключающее ИЛИ

Чтобы реализовать шифрование и дешифрование изображений, нам сначала нужно освоить побитовый метод вычисления XOR в математике.

Операция XOR также называется половинным сложением, и ее алгоритм аналогичен двоичному сложению без переноса. В python вычисление 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. Побитовое исключающее ИЛИ используется не только для шифрования и расшифровки изображений, но также может подсчитывать через него разные числа.

Что такое шифрование и дешифрование изображений

Определение шифрования изображения: путем выполнения побитовой операции XOR над исходным изображением и изображением ключа.

Определение расшифровки изображения: выполнить побитовую операцию XOR над зашифрованным изображением и изображением ключа.

Из шифрования и дешифрования изображения видно, что все они представляют собой одну и ту же операцию.

Теперь мы указываем, что буквальное обозначение для XOR — это xor, и в соответствии с приведенной выше побитовой операцией XOR мы предполагаем:

xor(a,b)=c

то вы можете получить:

xor(c,b)=a

или:

xor(c,a)=b

Подводя итог, мы предполагаем, что a — это исходные данные изображения, а b — ключ, тогда c, вычисленное с помощью xor(a, c), является зашифрованным зашифрованным текстом. Простой обзор шифрования и дешифрования.

Процесс шифрования: выполните побитовую операцию XOR над изображением a и ключом b, чтобы завершить шифрование и получить зашифрованный текст c.

Процесс расшифровки: выполните побитовую операцию XOR над зашифрованным текстом c и ключом b, чтобы завершить расшифровку и получить изображение 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()

После запуска получаем искаженное изображение:

1.png

расшифровать изображение

Расшифровка изображения с помощью побитовой операции 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()

После запуска мы можем получить исходное изображение и зашифрованное изображение:

2.png