跳转至

实验概述

实验目的

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

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

表 1-2 分组密码的工作模式

通过本次实验一系列的任务期望能够到达如下几个目的。

  1. 掌握 AES 算法的密钥生成方法;

  2. 掌握 AES 算法的加解密过程;

  3. 了解不同工作模式的运行方法。

实验内容

本次实验需要大家完成 AES128 密码算法,并用截图模板文件中给出的 key 和明文进行加密和解密。学有余力的同学还可以尝试下 CBC-AES128 密码算法,具体实验过程中可以尝试分如下几个步骤完成。

  1. 初始化明文块(按列存储)
  2. 密钥扩展,将 4 个字(16 字节)的密钥扩展为 44 个字(一个字四个字节)
  3. 完成字节替换、行移位、列混淆、轮密钥加等函数
  4. 完成逆字节替换、逆行移位、逆列混淆等函数
  5. 完成 AES128 的加密、解密函数

实验环境

本次实验提供了 C 语言代码框架,供大家参考,推荐大家用 Java、 Python 等语言自己实现。

说明 ✨

  1. 不允许直接使用库里面的接口,需要自己实现加密和解密的程序。
  2. 学有余力的同学可以尝试 CBC 工作模式的实现。