- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《密码编码学与网络安全》实验报告.doc
《密码编码学与网络安全》实验报告 题目:实验一 Hill算法 姓名 戴光昱 052433 信息安全 实验环境:Windows XP Sp2
硬件环境:CPU:Intel Core 2 Duo T7100 硬盘:120G 内存:2G 实验要求:
应用Hill算法编写一个程序。要求此程序能够进行正常的加解密。并能够实现m维Hill密码的已知明文攻击。 实验原理:
Hill加密算法的基本思想是将l个明文字母通过线性变换将它们转换为k个密文字母。脱密只要做一次逆变换就可以了。密钥就是变换矩阵本身。即M=m1m2……mlEk(M)=c1c2……cl其中c1=k11m1+k12m2+……+k1lmlc2=k21m1+k22m2+……+k2lml……cl=kl1m1+kl2m2+……+kllml
通常对于字母加解密,使用mod 26的方法。
以上线性方程可以采用矩阵表示。 实验内容及过程:
1.数据结构定义部分:
cmatrix:double型二维数组,用于存储密文矩阵信息。
newpmatrix:double型二维数组,用于存储矩阵转逆变换后的明文矩阵信息。
oldpmatrix:double型二维数组,用于存储一开始未转逆的明文矩阵信息。
pmatrix:double型二维数组,用于存储最终的明文矩阵信息。
kmatrix:double型二维数组,用于存储密钥矩阵信息。
sc,sp:string型,明密文存储字符串。
r,c:int型,用于限制每次明密文矩阵的已知字符数。
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) {
pmatrix[k][t]=1;
}
else{
pmatrix[k][t]=0;
}
}
}
for(int x=1;x=r;x++) {
for(int y=1;y=c*2;y++) {
System.out.print(pmatrix[x][y]+ );
}
System.out.println();
}
然后将所得的行代换后的明文矩阵进行逆矩阵变换操作,具体步骤参见线性代数相关章节。具体代码为:
for (int k = 1; k = c; k++) {
if (pmatrix[k][k] != 1) {
int bs = pmatrix[k][k];
pmatrix[k][k] = 1;
for (int p = k + 1; p = c * 2; p++) {
int sum = pmatrix[k][p];
while (sum % bs != 0) {
sum += 26;
}
pmatrix[k][p] = sum / bs;
}
}
for (int q = 1; q = r; q++) {
if (q != k) {
int bs = pmatrix[q][k];
for (int p = 1; p = c * 2; p++) {
pmatrix[q][p] -= bs * pmatrix[k][p];
}
}
else {
continue;
}
}
}
注意:其中的bs为各小矩阵的行列式的值。
以上两段代码为关于如何进行逆矩阵转换的具体实现。
4.输入与输出:
本算法的输入为如下三项:
a. 已知明密文对每对的字符个数;
b. 已知的明文对(若干);
c. 与之相对应的密文对。
本算法的输出为如下三项:
a. 行代换后的明文矩阵;
b. 明文矩阵的逆矩阵;
c. 最终解得的密钥矩阵K。
5.最终运行结果:
输入如下所述:
已知明密文对每对的字符个数:2
已知的明文:fr,与之相对的密文:PQ;
已知的明文:id,与之相
文档评论(0)