程序下载链接:https://download.csdn.net/download/m0_56241309/87456830
一、实验目的 实验环境: Windows 11操作系统;Matlab2019b 实现目标:实现Hill密码加解密;矩阵规模可随意设置; 实现加密解密交互界面;实现加密解密关键步骤信息输出。 |
二、方案设计 1. 加密过程 首先获取明文字符串,并对明文字符串做预处理,将字符串中的所有空格删除,并将所有字母大写 此外,由于Hill密码要求每次计算时,明文字符的个数需要与密钥矩阵的行数相同,因此需要确保明文字符串的长度是行数的整数倍。所以,长度不足时,使用明文字符串的最后一个字符进行尾部填充 预处理结束后,获取密钥矩阵规模(必须是方阵)以及密钥矩阵元素 在获取到密钥矩阵元素后,需要对文本框内的元素进行矩阵化处理(注意Matlab文本框中需要按列输入矩阵元素),以空格为分隔符将每个元素从文本款中提取出来,并存储到密钥矩阵中,直至最后一个字符 密钥矩阵初始化结束后,可以开始加密。假设密钥矩阵规模为n*n,那么每次加密时,使用n个明文字符与密钥矩阵相乘,得到每次加密后的n个密文字符。以此类推,直至最后一组明文字符也运算完毕。最后将所有组别的密文字符拼接在一起,便得到最终加密后的密文字符串。 2. 解密过程 首先获取密文字符串,由于密文字符串中已无空格以及小写字符的存在,因此无需进行预处理 随后获取密钥矩阵规模(必须是方阵)以及密钥矩阵元素 在获取到密钥矩阵元素后,需要对文本框内的元素进行矩阵化处理(注意Matlab文本框中需要按列输入矩阵元素),以空格为分隔符将每个元素从文本款中提取出来,并存储到密钥矩阵中,直至最后一个字符 接下来需要对密钥矩阵的逆矩阵进行计算。首先计算密钥矩阵的行列式N,随后计算N关于26的逆元I。紧接着,需要确定密钥矩阵的伴随矩阵,计算方式为A=mod(inv(matrix)*det(matrix),26)。最后通过计算逆矩阵,计算方式为De_matrix=mod(NI*Accompanny,26) 计算得到密钥矩阵的逆矩阵后,可以开始解密。假设密钥矩阵的规模依旧为n*n,那么每次解密时,使用n个密文字符与逆矩阵相乘,得到每次解密后的n个明文字符。以此类推,直至最后一组密文字符也运算完毕。最后将所有组别的明文字符拼接在一起,便得到最终解密后的明文字符串。 3. 信息输出 设置两个信息输出函数,分别实现加密界面和解密界面的信息输出 4. 交互界面 基于Matlab2019b中的mlapp编程实现 |
三、方案实现 1. 加密过程 介绍:加密按钮EnButtom回调函数
3. 信息输出 介绍:加密界面信息输出函数logRefresh_func_En
介绍:解密界面信息输出函数logRefresh_func_De
4. 交互界面 Matlab2019b的mlapp开发环境 |
四、数据测试与分析 1. 数据测试 明文:love 密钥矩阵: 密文:ZQFS 加密过程 解密过程
加解密演示 2. 分析 Hill密码是一种典型的分组加密方法。加密方与解密方约定一个共同的密钥矩阵,用于解密与解密。其中,需要确保明文字符的长度为密钥矩阵的行数的整数倍。加密方使用明文字符串与密钥矩阵相乘,得到一组密文字符。以此类推,直至计算至最后一组明文字符。最后将所有组别的密文字符拼接在一起,便得到最终的密文。解密方在获取密文字符串后,可以直接输入密钥矩阵的逆矩阵,也可以输入密钥矩阵后,计算得到密钥矩阵的逆矩阵。实验中,采用了第二种方式。在输入密钥矩阵后,需要依次计算密钥矩阵的行列式、行列式的逆元、密钥矩阵的伴随矩阵,最终计算得到密钥矩阵的逆矩阵。得到逆矩阵后,可以开始解密。解密方使用密文字符串与逆矩阵相乘,得到一组明文字符。以此类推,直至计算至最后一组密文字符。最后将所有组别的明文字符拼接在一起,便得到最终的明文文本。 |
五、总结 Hill密码是一种典型的分组密码 Hill密码对于唯密文攻击方式具有很高的放攻击能力 Hill密码对于已知明文攻击方式来时抵抗能力很弱 Hill密码本身基于矩阵乘法体系 分组密码中,即使密钥由多个值组成,但是每一组明文都使用同样的密钥进行加密,因此依然是单密钥 在Hill密码中,加解密双方使用同一个密钥矩阵。但是加密方使用的是原矩阵进行加密,解密方使用密钥矩阵的逆矩阵进行解密 在实现Hill密码时,需要处理大量的字符串。其中,在对密钥矩阵进行处理时需要注意,Matlab在获取密钥矩阵的元素时,需要按列进行输入。输入后,需要以空格为分隔符,将每个元素提取出来,并存储到密钥矩阵中 此外,在处理明文文本时,除了需要处理空格以及小写字符外,还需要确保明文字符有足够的元素参与运算,即需要确保明文字符的长度为密钥矩阵行数的整数倍 还需要注意的是,Hill密码的密钥矩阵规模必须是方阵,但并不是所有的方阵都存在逆矩阵 实验中,没有对密钥矩阵的规模加以限定,可以使用随意规模的方阵进行加解密。明文文本的预处理也可以保证有足够长的明文字符串参与加密,鲁棒性更强 |