任务描述
背景
之前实训学习了如何对字符进行加密,其实图像也可以加密,如下图所示。


其中,% 表示求余运算,a 和 b 是此加密方法的密钥,在本关,a 取 1、b 取 2。
任务
本关任务是实现函数enImg(path1, path2)函数,其功能是利用 Arnold 置换方法对图像 1 进行加密,并将加密结果保存为图像 2, 图像 1 和图像 2 的路径分别为path1和path2。
相关知识
参照之前关卡的程序。
利用上面的公式将图像 1 中所有像素均移动 1 次,称为一次置换。一次置换并不能达到很好的加密效果,解决方法是进行 n 次置换,下图给出了 n 取不同值时的加密效果。过关后,可以尝试进行多次置换,观察加密效果。

编程要求
在 Begin-End 区间实现enImg(path1, path2)函数,具体要求见上。
测试说明
系统会检查程序生成的图像文件,若正确则输出:
你的图像与正确答案相同!
开始你的任务吧,祝你成功!
from PIL import Image
########## Begin ##########
def jisuanp(x, y, n):
a = 1
b = 2
x2 = (x + b * y) % n
y2 = (a * x + (a * b + 1) * y) % n
return x2,y2
def enImg(path1, path2):
# 获取原始图像
img1 = Image.open(path1) # 图像1
w, h = img1.size
# 创建新图像
img2 = Image.new('RGB', (w, h), 'white') # 图像2
for x in range(w):
for y in range(h):
gray = img1.getpixel((x, y))
# 计算原图像像素移动后的位置
x,y = jisuanp(x,y,w)
# 填进新图像
img2.putpixel((x, y), gray) # 放回像素
img2.save(path2)
########## End ##########
path1 = 'step6.bmp' #原始图像
path2 = 'step6_2.bmp' #加密后的图像
enImg(path1, path2)

本文介绍如何使用Arnold置换方法对图像进行加密,通过enImg函数实现加密并保存,探讨多次置换对加密效果的影响。

1955

被折叠的 条评论
为什么被折叠?



