AES - ECB-шифрование изображения MNIST (матрица 28 x 28) с использованием Crypto.Cipher: ValueError: ndarray не является C -смежным ИЛИ нечетным шестнадцатеричным - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь зашифровать все изображения MNIST (импортированные из двойной матрицы 10000x28x28) в python. Мне удалось получить одно изображение из набора, но когда я попытался зашифровать его, я получаю следующее сообщение об ошибке: ValueError: ndarray is not C -contiguous Приведенный ниже код был тем сообщением перед моей первой попыткой:

from Crypto.Cipher import AES
import scipy.io
from sympy.series import order

mymat = scipy.io.loadmat('test_images_var0_00.mat')
mymat_data = mymat['test_images_var0_00']

key = 'abcdefghijklmnop'

cipher = AES.new(key, AES.MODE_ECB)

myfinal = mymat_data

print(mymat_data.shape)
print(myfinal.shape)
#is (10000,28,28)

myselection = mymat_data[1,:,:]


#myselection = myselection.copy(order = 'C')
mySelectionEncrypted = cipher.encrypt(myselection)


print(myselection.shape)
print(myselection)



myfinal[1,:,:] = myselection

print(mySelectionEncrypted)

Я обновил код в соответствии с ValueError: ndarray не является C -смежным в Cython , чтобы иметь значение 'C' - непрерывно:

from Crypto.Cipher import AES
import scipy.io
from sympy.series import order

mymat = scipy.io.loadmat('test_images_var0_00.mat')
mymat_data = mymat['test_images_var0_00']

key = 'abcdefghijklmnop'

cipher = AES.new(key, AES.MODE_ECB)

myfinal = mymat_data

print(mymat_data.shape)
print(myfinal.shape)
#is (10000,28,28)

myselection = mymat_data[1,:,:]


myselection = myselection.copy(order = 'C')
mySelectionEncrypted = cipher.encrypt(myselection)


print(myselection.shape)
print(myselection)



myfinal[1,:,:] = myselection

print(mySelectionEncrypted)

Однако вывод представляет собой нечетный шестнадцатеричный код (b '\ xf5e ~ \' \ x8d \ n \ xfa \ xd7 \ xc8H \ xb9e \ x89 \ x8c1 \ xdf \ xf5e ~ \ '...), верно ли это, и если да, то как я могу преобразовать его обратно в (28x28 двойной)?

...