《Hill算法实验报告(共3页).doc》由会员分享,可在线阅读,更多相关《Hill算法实验报告(共3页).doc(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上密码编码学与网络安全实验报告题目:实验三 Hill算法姓名实验环境:Windows XP Sp2硬件环境:CPU:Intel Core 2 Duo T7100 硬盘:120G 内存:2G (自己填写实际)实验要求: 应用Hill算法编写一个程序。要求此程序能够进行正常的加解密。并能够实现m维Hill密码的已知明文攻击。实验原理:Hill加密算法的基本思想是将l个明文字母通过线性变换将它们转换为k个密文字母。脱密只要做一次逆变换就可以了。密钥就是变换矩阵本身。即M=m1m2mlEk(M)=c1c2cl其中c1=k11m1+k12m2+k1lmlc2=k21m1+k22m
2、2+k2lmlcl=kl1m1+kl2m2+kllml通常对于字母加解密,使用mod 26的方法。以上线性方程可以采用矩阵表示。实验内容及过程:1.数据结构定义部分:cmatrix:double型二维数组,用于存储密文矩阵信息。newpmatrix:double型二维数组,用于存储矩阵转逆变换后的明文矩阵信息。oldpmatrix:double型二维数组,用于存储一开始未转逆的明文矩阵信息。pmatrix:double型二维数组,用于存储最终的明文矩阵信息。kmatrix:double型二维数组,用于存储密钥矩阵信息。 sc,sp:string型,明密文存储字符串。 r,c:int型,用于限制
3、每次明密文矩阵的已知字符数。2.基本函数定义:changemod:返回类型为int型,参数类型为int型。主要用途是:对一个输入的整型不断进行模26处理。直到这个数能够被变量bs整除。(这个函数的设置目的主要是为了防止算出的矩阵为小数)。3.主要的算法思想:对于输入的明密文矩阵,pmatrix和cmatrix矩阵。首先使用线性代数的方法将明文矩阵进行行代换,如下列代码所示:for(int k=1;k=r;k+) for(int t=c+1;t=c*2;t+) if(t-k)=c) pmatrixkt=1; else pmatrixkt=0; for(int x=1;x=r;x+) for(in
4、t y=1;y=c*2;y+) System.out.print(pmatrixxy+ ); System.out.println(); 然后将所得的行代换后的明文矩阵进行逆矩阵变换操作,具体步骤参见线性代数相关章节。具体代码为:for (int k = 1; k = c; k+) if (pmatrixkk != 1) int bs = pmatrixkk;pmatrixkk = 1;for (int p = k + 1; p = c * 2; p+) int sum = pmatrixkp;while (sum % bs != 0) sum += 26;pmatrixkp = sum /
5、bs;for (int q = 1; q = r; q+) if (q != k) int bs = pmatrixqk;for (int p = 1; p = c * 2; p+) pmatrixqp -= bs * pmatrixkp;else continue;注意:其中的bs为各小矩阵的行列式的值。以上两段代码为关于如何进行逆矩阵转换的具体实现。4.输入与输出:本算法的输入为如下三项:a. 已知明密文对每对的字符个数;b. 已知的明文对(若干);c. 与之相对应的密文对。本算法的输出为如下三项:a. 行代换后的明文矩阵;b. 明文矩阵的逆矩阵;c. 最终解得的密钥矩阵K。5.最终运行结果:输入如下所述:已知明密文对每对的字符个数:2已知的明文:fr,与之相对的密文:PQ;已知的明文:id,与之相对的密文:CF;输出为下图所示:出现的问题以及解决方案:问题1:所做出的密钥矩阵K中元素的数值是小数。解决方案:由于忽视了每次矩阵的mod26计算,造成了最终得出的密钥矩阵K中的小数。只需对每一个被除数每次+26直到除尽即可。最后统一进行mod 26直到最简。专心-专注-专业
限制150内