### 东南大学数学实验报告-密码实验Hill2密码体系
#### 实验目的
本次实验旨在通过实际操作加深对Hill2密码体系的理解,并熟练掌握MATLAB中的几个关键命令,如`mod`、`det`、`find`等,这些命令在密码学中有着重要的应用。通过本实验,学生将能够独立完成基于Hill2密码算法的加密与解密过程。
#### 预备知识
- **`mod`**:求余数函数,用于处理模运算,例如`mod(x, n)`返回的是`x`除以`n`的余数。
- **`det`**:计算矩阵的行列式值,行列式的值对于确定矩阵是否可逆至关重要,在Hill密码中用于判断加密矩阵是否可以用来加密。
- **`find`**:查找满足特定条件的元素及其位置,例如找出数组中所有符合条件的元素索引。
- **其他MATLAB基础知识**:包括数组操作、循环结构(如`for`循环)、条件语句(如`if`语句)等基本编程知识。
#### 实验内容与要求
##### (1)加密过程示例
**加密矩阵**:设`A=[1,2;0,3]`。
**明文**:“SHUXUEJIANMOJINGSAI”。
- 将明文转换为数字表示:根据ASCII码表,将字母转换为对应的数值,例如“A”对应65,“B”对应66,以此类推。
- 调整明文长度:如果明文长度不是2的倍数,则在末尾添加一个字符使其成为2的倍数。
- 将明文转化为二维数组:根据调整后的明文长度,将其转化为2×N的矩阵形式。
- 应用Hill2加密算法:利用矩阵乘法进行加密,即`C = mod(A * M, 26)`,其中`M`为明文矩阵,`C`为密文矩阵。
- 将密文转化为字符表示:将加密后的数值再次转换为对应的字符。
**结果**:“IXQTEOKCNMIDKPSESA”。
##### (2)解密过程示例
**加密矩阵**:设`A=[11;03]`。
**密文**:“AXSTZOSAOPBSTKSANKOPSAHAUUNSUUAKGAUZCKOPDO”。
- 将密文转换为数字表示:同加密步骤。
- 构建密文矩阵:根据密文长度构建2×N的矩阵。
- 计算逆矩阵:利用行列式和伴随矩阵计算出加密矩阵的逆矩阵`A_inv`。
- 应用Hill2解密算法:`M = mod(A_inv * C, 26)`,其中`C`为密文矩阵,`M`为解密后得到的明文矩阵。
- 将明文转化为字符表示:同加密步骤。
**结果**:“SHUXUEJIANMOJINGSAI”。
##### (3)破解未知密文
**密文**:“BKOPGATRHMMBFCSDJCCAUU”。
**已知映射关系**:“SDJC”代表“IJIA”。
- 根据已知的密文与明文关系,构建密钥矩阵。
- 计算密钥矩阵的逆矩阵。
- 使用逆矩阵对未知密文进行解密。
**结果**:“GUANXINFUMUREAIJIATING”。
### 总结
通过本实验的学习,不仅让学生熟悉了MATLAB的基本操作,还深入了解了Hill2密码的工作原理。此外,通过实际案例的操作,提高了学生的编程能力和解决问题的能力。Hill2密码作为一种经典的多字母替换密码,在学习现代密码学时具有重要的参考价值。