Home

Awesome

基于序列发生器的图像加密系统

怎么配置环境?

本程序所依赖的包在 requirements.txt 中记录,可使用以下命令安装:

pip install -r requirements.txt

如何运行?

python main.py

即可运行。 可以在main函数中指定要执行的加密算法,注释中已经标明了不同函数与报告中的测试用例的对应情况。

要运行其中一个测试,只需要注释掉其他测试,然后执行 python main.py 即可。

可以在调用函数时指定path参数为图像路径;do_attack参数为True时将执行对密文图像的攻击。

输出结果是什么?

每运行一个测试,将会输出两张图片,第一张是加密后的图片,第二张是对加密后的图片进行解密得到的图片。

如果没有对密文图像进行攻击,则第二张图像应该和原图像相同;若对密文图像进行了攻击,则第二张图像将和原图像有所区别。

有哪些预设的加密器?

预设的加密器可以在 encrypt.py 中查看,只要是添加了 @encryptor_registry.register 装饰器的类都可以被使用。

预设的加密操作在 operation.py 中,只要是添加了 @operation_registry.register 装饰器的类都可以被使用。

怎么添加自己的加密器?

main.py 中的 check_random_trans 函数就是一个创建自己的加密器的例子。它先创建了一个基于随机序列发生器的加密系统,然后向其中添加了傅立叶变换操作、行列置换操作。

要添加基于混沌系统序列发生器的加密系统,可以参考 encrypt.pyClassicChaosEncryptor 类的实现。具体而言,除了添加变换操作外,还需要添加混沌映射。

实现加密器并用 @encryptor_registry.register(Name) 注册后,可以通过 encryptor_registry.build(Name, args) 来创建加密器的实例。添加新的加密操作同理。

也可以向预设的加密器中添加新的加密操作,调用加密器的 add_operation 方法即可。

注意 Diffusion操作不能在变换域上执行,因为Diffusion期望的输入是整型,而变换域上的图片表示通常不是整数。

注意 一些加密算法只支持对正方形图像的加密,如Arnold变换。因此请尽量使用正方形图像进行测试,以免造成非预期的结果。