1 作业任务:
根据"信息安全导论"课程第5次课讲述的S-DES算法,使用你们自己最擅长的程序语言(C++/QT或Java+Swing、Python+QT等)来编程实现加、解密程序。
二人一组,共同完成。
2 标准设定:
2.1 分组长度:8-bit
2.2 密钥长度:10-bit
2.3 算法描述:
2.3.1 加密算法:
2.3.2 解密算法:
2.3.3 密钥扩展:
2.4 转换装置设定:
2.3.1 密钥扩展置
2.3.2 初始置换盒
2.3.3 最终置换盒
2.3.4 轮函数
备注:此处的S-box2与PPT上面的相比略有改动,以此处为准。
3 编程和测试要求
3.1 第1关:基本测试
根据S-DES算法编写和调试程序,提供GUI解密支持用户交互。输入可以是8bit的数据和10bit的密钥,输出是8bit的密文。
3.2 第2关:交叉测试
考虑到是算法标准,所有人在编写程序的时候需要使用相同算法流程和转换单元(P-Box、S-Box等),以保证算法和程序在异构的系统或平台上都可以正常运行。
设有A和B两组位同学(选择相同的密钥K);则A、B组同学编写的程序对明文P进行加密得到相同的密文C;或者B组同学接收到A组程序加密的密文C,使用B组程序进行解密可得到与A相同的P。
3.3 第3关:扩展功能
考虑到向实用性扩展,加密算法的数据输入可以是ASII编码字符串(分组为1 Byte),对应地输出也可以是ACII字符串(很可能是乱码)。
3.4 第4关:暴力破解
假设你找到了使用相同密钥的明、密文对(一个或多个),请尝试使用暴力破解的方法找到正确的密钥Key。在编写程序时,你也可以考虑使用多线程的方式提升破解的效率。请设定时间戳,用视频或动图展示你在多长时间内完成了暴力破解。
3.5 第5关:封闭测试
根据第4关的结果,进一步分析,对于你随机选择的一个明密文对,是不是有不止一个密钥Key?进一步扩展,对应明文空间任意给定的明文分组
,是否会出现选择不同的密钥 加密得到相同密文 的情况?4 代码规范
4.1 变量命名规范
尽量使用有意义的名字来为变量、函数和类命名,描述其用途。建议使用驼峰命名法(CamelCase)或下划线分隔命名法(snake_case)。使用描述性的名字,避免使用单个字符的变量名,除非是临时变量。
4.2 代码注释
请使用各编程语言对应的符号进行单行或多行注释,在注释中需使用清晰、有意义的语言,用于解释单行代码或代码块的功能、算法或特定说明(如代码的创新)。同时避免过多的注释,只需复制相对复杂或不明显的部分。
4.3 函数式编程
请使用函数式编程,将代码模块化,每个小模块负责特定的功能实现。对于重复的代码,可以使用函数或类来实现代码的复用,推荐使用标准库和第三方库辅助算法的实现。
5 提交要求
5.1 在石墨文档数据表格中提交Github或Gitee链接
《信息安全导论-作业1提交》,可复制链接后用石墨文档 App 打开
https://shimo.im/sheets/Wr3DpKY7JoSLQJ3J/MODOC/
5.2 Github或Gitee中提供
5.2.1 源代码
5.2.2 测试结果
根据上述5个关卡的测试要求,分别提供相应的测试结果,灵活使用文字、表格、截图的方式来展现。
5.2.3 相关文档
包括用户指南、开发手册(对必要组件的封装之后应当提供的接口文档)等。
6 截止时间
2024.10.7 23:00
请各组同学在截止时间前提交Github链接,过期不候。