本程序所依赖的包在 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.py
中 ClassicChaosEncryptor
类的实现。具体而言,除了添加变换操作外,还需要添加混沌映射。
实现加密器并用 @encryptor_registry.register(Name)
注册后,可以通过 encryptor_registry.build(Name, args)
来创建加密器的实例。添加新的加密操作同理。
也可以向预设的加密器中添加新的加密操作,调用加密器的 add_operation
方法即可。
注意 Diffusion操作不能在变换域上执行,因为Diffusion期望的输入是整型,而变换域上的图片表示通常不是整数。
注意 一些加密算法只支持对正方形图像的加密,如Arnold变换。因此请尽量使用正方形图像进行测试,以免造成非预期的结果。