图像置换加密

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

任务描述
背景

  之前实训学习了如何对字符进行加密,其实图像也可以加密,如下图所示。
在这里插入图片描述
在这里插入图片描述
其中,% 表示求余运算,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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值