作业1:S-DES算法实现
2024年9月24日 更新
开启更多功能,提升办公效能

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链接,过期不候。