# 实验一 古典密码算法 ## 一、实验目的 通过编程实现代替密码算法和置换密码算法,加深对古典密码体制的了解。 ## 二、实验原理与内容 古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。 ### 1、代替密码 代替密码算法的原理是使用代替法进行加密,就是对明文中的字符用其他字符代替后形成密文。例如,明文字母 $a, b, c, d$,用 $d, e, f, g$ 做对应代替后形成密文。代替密码包括多种类型,如单表代替密码,多表代替密码,多字母代替密码等。 试编程实现一种典型的单表代替密码—凯撒(Caesar)密码。它的加密方法是将明文中的每个字母用此字符在字母表中后面的第 $k$ 个字母代替。它的加密过程可以表示为下面的函数: $$E(k) = (m + k) \bmod n$$ 其中,$m$ 为明文字母在字母表中的位置数,$n$ 为字母表中的字母个数,$k$ 为密钥,$E(k)$ 为密文字母在字母表中对应的位置数。解密过程类推。 ### 2、置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码也叫换位密码。 试编程实现矩阵置换密码。它的加密方法是将明文中的字母按照给定的顺序安排在一个矩阵中,然后根据密钥提供的顺序重新组合矩阵中的字母,形成密文。例如,明文为 attack begins at five,密钥为 cipher,将明文按照每行 6 个字母的形式排在矩阵中,如下形式: $$ \begin{matrix} a & t & t & a & c & k \\ b & e & g & i & n & s \\ a & t & f & i & v & e \end{matrix} $$ 根据密钥 cipher 中各字母在字母表中出现的先后顺序,给定一个置换: $$ \begin{pmatrix} 1 & 2 & 3 & 4 & 5 & 6 \\ 1 & 4 & 5 & 3 & 2 & 6 \end{pmatrix} $$ 根据上面的置换,将原有矩阵中的字母按照第 1、4、5、3、2、6 的顺序排列,则有下列形式: $$ \begin{matrix} a & a & c & t & t & k \\ b & i & n & g & e & s \\ a & i & v & f & t & e \end{matrix} $$ 从而得到密文:aacttkbingesaivfte 解密过程类推。 ## 三、实验环境 一台安装Windows系统的PC机,并安装C、C++、C#、Python或JAVA编程软件。 ## 四、实验报告要求 1. 根据实验内容完成任务,密码算法的加密和解密过程,要求加密过程的明文和密钥、解密过程的密文和密钥由用户手动任意输入,并且以包含本人姓名的字符串作为明文输入,凯撒密码的密钥数字为本人学号的后两位,矩阵换位密码的密钥为下一学号学生的姓名去重复全拼,分别演示加密算法和解密算法的执行结果。 2. 实验报告按模板格式编写,实验过程及实验结果部分应包含完整的加解密算法源代码和运行结果,并以PDF文件形式上传至学习通系统。