Я пишу скрипт, который может шифровать и расшифровывать изображение с помощью алгоритма RSA. Мой открытый ключ (7, 187), а закрытый ключ (23 187), теперь расчет для шифрования правильный, как для записи в матрице изображения, 41 зашифрованное значение равно 46. Но когда происходит расшифровка не дает соответствующего результата, например, для 46 он дает 136, и для каждой записи 46 в матрице шифрования результат, который я получаю, равен 136 в матрице дешифрования. И я не знаю, почему это происходит. Когда я делаю тот же расчет в приглашении (или оболочке) Python, он дает правильный ответ.
В сценарии я сначала преобразовываю изображение RGB в оттенки серого, а затем преобразовываю его в массив 2d numpy, затем для каждого элемента я применяю алгоритм RSA (ключи), а затем сохраняю его как изображение. Затем я применяю ключ дешифрования в зашифрованной матрице, и тогда возникает проблема. Вот код:
from PIL import Image
import numpy as np
from pylab import *
#encryption
img1 = (Image.open('image.jpeg').convert('L'))
img1.show()
img = array((Image.open('image.jpeg').convert('L')))
a,b = img.shape #saving the no of rows and col in a tuple
print('\n\nOriginal image: ')
print(img)
print((a,b))
tup = a,b
for i in range (0, tup[0]):
for j in range (0, tup[1]):
img[i][j]= (pow(img[i][j],7)%187)
print('\n\nEncrypted image: ')
print(img)
imgOut = Image.fromarray(img)
imgOut.show()
imgOut.save('img.bmp')
#decryption
img2 = (Image.open('img.bmp'))
img2.show()
img3 = array(Image.open('img.bmp'))
print('\n\nEncrypted image: ')
print(img3)
a1,b1 = img3.shape
print((a1,b1))
tup1 = a1,b1
for i1 in range (0, tup1[0]):
for j1 in range (0, tup1[1]):
img3[i1][j1]= ((pow(img3[i1][j1], 23))%187)
print('\n\nDecrypted image: ')
print(img3)
imgOut1 = Image.fromarray(img3)
imgOut1.show()
print(type(img))
Значения матриц:
Исходное изображение:
[[41 42 45 ... 47 41 33]
[41 43 45 ... 44 38 30]
[41 42 46 ... 41 36 30] ...
[43 43 44 ... 56 56 55]
[45 44 45 ... 55 55 54]
[46 46 46 ... 53 54 54]]
Зашифрованное изображение:
[[ 46 15 122 ... 174 46 33]
[ 46 87 122 ... 22 47 123]
[ 46 15 7 ... 46 9 123] ...
[ 87 87 22 ... 78 78 132]
[122 22 122 ... 132 132 164]
[ 7 7 7 ... 26 164 164]]
Расшифрованное изображение:
[[136 70 24 ... 178 136 164]
[136 111 24 ... 146 141 88]
[136 70 96 ... 136 100 88] ...
[111 111 146 ... 140 140 1]
[ 24 146 24 ... 1 1 81]
[ 96 96 96 ... 52 81 81]]
Любая помощь будет оценена. Благодарю вас.
46
в качестве зашифрованного значения, потому что исходное изображение должно иметь dtypeuint8
, аpow(np.uint8(41),7)%187
оценивается как86
, а не46
. - person Stop harming Monica   schedule 20.03.2019