我试图实现wikipedia上提到的simple algorithm
来使用(2 n) secret sharing images
创建一个python
。
有一个简单的二进制(黑白)视觉加密算法,可以从原始未加密图像创建两个加密图像。算法如下:首先创建一个大小和形状与原始图像相同的随机像素图像。接下来,创建与第一个相同大小和形状的第二个图像,但如果原始图像的像素与第一个加密图像中的相应像素相同,则将第二个加密图像的相同像素设置为相反的颜色。如果原始图像的像素不同于第一加密图像中的相应像素,则将第二加密图像的相同像素设置为与第一加密图像的相应像素相同的颜色。现在可以使用异或(xor)将这两个明显随机的图像组合起来重新创建原始图像。
这是生成share1 and share2
的代码。
share1 = Image.new("1", size, "white")
share1pix = share1.load()
for i in range(len(self.key)):
for j in range(255):
x = randint(0,1)
if x == 0:
share1pix[j, i] = 0
share2 = Image.new("1", size)
share2pix = share2.load()
for i in range(len(self.key)):
for j in range(255):
if pix[j, i] == share1pix[j, i]:
if pix[j, i] == 255:
share2pix[j, i] = 0
else:
share2pix[j, i] = 255
else:
share2pix[j, i] = share1pix[j, i]
其中
pix
是原始图像数组。但是,我得到的输出是原始图像
共享1
共享2
如您所见,
share2.png
不是随机的。这只是original.png
的反面我哪里做错了?请帮忙。蒂亚。 最佳答案
你的算法有点错误其思想是,对于pix
、share1
和share2
的每个像素,我们有以下关系:
share2 = pix XOR share1
这意味着:
if pix[j, i] == share1[j, i]:
share2[j, i] = 0
else:
share2[j, i] = 255