python中的paillier图像加密

python中的paillier图像加密,python,image,encryption,paillier,Python,Image,Encryption,Paillier,我曾尝试使用paillier对图像进行加密。但我无法解密它。请帮我找一下 from phe import paillier from PIL import Image import cv2 import PIL import numpy openfilename = "greyscale.png" img2 = cv2.imread(openfilename,0) public_key, private_key = paillier.generate_paillier_keypair() enc

我曾尝试使用paillier对图像进行加密。但我无法解密它。请帮我找一下

from phe import paillier
from PIL import Image
import cv2
import PIL
import numpy
openfilename = "greyscale.png"
img2 = cv2.imread(openfilename,0)
public_key, private_key = paillier.generate_paillier_keypair()
encrypted_number_list = [[public_key.encrypt(int(x)) for x in row] for row 
in img2]
encrypted_number_array = numpy.array(encrypted_number_list)
print(encrypted_number_array)
decrypted_number_list =[private_key.decrypt(x) for x in 
encrypted_number_array]
decrypted_number_array = numpy.array(decrypted_number_list)
print(decrypted_number_array)
以下是我正在使用的图像:


图像加密/解密:


当我运行它时,出现了以下错误。TypeError:预期encrypted_number为EncryptedNumber不是:您可以共享greyscale.png吗?我已共享了greyscale图像我不知道paillier,但以encrypted_number_list=。。。在我看来是不对的。我不相信您在使用OpenCV阅读的图像中有您试图迭代的行的概念。我想我只需要简单地读取整个PNG文件,而不是imread,然后将数据传递给加密程序。然后,您可以在解密后进行imdecode以获得可显示的图像。@MarkSetchell OpenCV图像可以表示为列表列表。这样你就可以重复一遍了。@Alderven谢谢你的回复。Paillier图像加密有什么快速的方法吗?对于大图像来说,这实际上是一个非常非常缓慢的过程
import cv2
from phe import paillier
from scipy.misc import toimage

img = cv2.imread('image.png', 0)
public_key, private_key = paillier.generate_paillier_keypair()
data_encrypted = [[public_key.encrypt(int(x)) for x in row] for row in img]

data_decrypted = [[private_key.decrypt(x) for x in row] for row in data_encrypted]
toimage(data_decrypted).save('result.png')