实验概述
实验目的
AES 是一个对称分组密码算法,由美国国家标准技术研究所(NIST)在 2001 年发布。密钥长度至少支持 128 位,根据密钥长度的不同加密和解密的轮数不同,常见由 128 位,192 位和 256 位,通常称为 AES128、AES192、AES256 加密。本次实验我们使用的密钥长度为 128,也就是 AES128 密码算法。

分组密码算法每次只能处理特定长度的一块数据,实际上明文的长度通常都不是固定的,因此需要对明文进行分块,用分组密码进行迭代处理,最终将明文全部加密。具体的迭代模式就是分组密码的工作模式。NIST 定义了分组密码的五种“工作模式”,覆盖了大量使用分组密码的应用。

通过本次实验一系列的任务期望能够到达如下几个目的。
-
掌握 AES 算法的密钥生成方法;
-
掌握 AES 算法的加解密过程;
-
了解不同工作模式的运行方法。
实验内容
本次实验需要大家完成 AES128 密码算法,并用截图模板文件中给出的 key 和明文进行加密和解密。学有余力的同学还可以尝试下 CBC-AES128 密码算法,具体实验过程中可以尝试分如下几个步骤完成。
- 初始化明文块(按列存储)
- 密钥扩展,将 4 个字(16 字节)的密钥扩展为 44 个字(一个字四个字节)
- 完成字节替换、行移位、列混淆、轮密钥加等函数
- 完成逆字节替换、逆行移位、逆列混淆等函数
- 完成 AES128 的加密、解密函数
实验环境
本次实验提供了 C 语言代码框架,供大家参考,推荐大家用 Java、 Python 等语言自己实现。
说明
- 不允许直接使用库里面的接口,需要自己实现加密和解密的程序。
- 学有余力的同学可以尝试 CBC 工作模式的实现。