古典密码实验报告

2018-12-22 20:11

实 验 报 告

一、 实验室名称:

SimpleSPC信息安全云实验系统

二、 实验项目名称:

古典密码——置换密码

三、 实验学时:

1学时

四、 实验原理:

1) 算法原理

a) 置换密码算法是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据密钥给出的矩阵置换产生新的矩阵,从而恢复明文。

b) 置换密码(Permutation Cipher),又称换位密码。算法实施时,明文的字母保持相同,但顺序会被打乱。置换只不过是一个简单的换位,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。置换密码的特点是仅有一个发送方和接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。

c) 设n为一固定整数,P、C和K分别为明文空间、密文空间和密钥空间。明/密文是长度为n的字符序列,分别记为X(x1,x2,?,xn)属于P和Y(y1,y2,?,yn)属于C ,K是定义在{1,2,?,n}的所有置换组成的集合。对任何一个密钥(即一个置换),定义置换如下:

加密置换为:

解密置换为:

上式中,是的逆置换,密钥空间K的大小为n!

2) 算法参数

置换密码算法主要有c、m、k、n四个参数。c为密文,m是明文,k为密钥,n为模数。

3) 算法流程

算法流程。如图所示

五、 实验目的:

1) 学习置换密码的原理

2) 学习置换密码的算法实现

六、 实验内容:

1.在虚拟机上运行置换密码.exe可执行文件,根据提示输入明文和密钥,同时检查输出的解密后的结果是否与明文一致。

2.学习掌握置换密码的原理,并根据明文和密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。

3.看懂实验程序代码,如有需要可在其上进行优化。

七、 实验器材(设备、虚拟机名称):

Windows 7

工具:C:\\tools\\密码学课程\\01密码学算法\\02 古典密码\\01 置换密码

八、 实验步骤:

1、查看置换密码算法运行结果并学习其核心算法

1.1 点击【置换密码.exe】,选择对明文【asdfgh】使用密钥【qwerty】进行加密,程序运行结果。如下图所示

但是在实验中发现,当密钥中包含相同字符时,加密和解密结果会出现问题,如下图所示:

在观察程序代码后,发现应该是加密表生成出现问题,因此在实验中我重新修改了程序中计算加密表部分的代码,利用双层循环,对于每一个字符,计算比其小的字符或者和它一样但是出现在其左侧的字符个数,得到的序列便是加密表的内容,将程序按照上述思路修改后测试运行正确。

1.2 更新后的置换密码的核心算法如下所示。

#include #include using namespace std;

char a[20][6], b[20][6], c[20][6], m[102], key[6], ky[6], mw[102], bb[102]; int zh[6], zh1[6]; int j, len, length, e, f; void

ISD_zhihuan_zhihuan(int le) { } int

ISD_zhihuan_encrypt() {

cout << endl << \请输入密钥,要求是6位字母:\; cin >> key;

for (int p = 0; p < 6; p++) { }

//生成置换表

ky[p] = key[p]; int i, s = 0; if (le % 6 == 0) { } else { }

length = 6 * j;

for (j = 0; j<((le - le % 6) / 6); j++) j++; int w = 0;

for (int l = le - le % 6; l

for (int ll = le % 6; ll<6; ll++) { }

a[j][ll] = 'X';

//数组后补x使数组长度为6的倍数 a[j][w] = m[l]; for (i = 0; i<6; i++, s++) { }

a[j][i] = m[s];

//明文长度不是6的倍数时 for (j = 0; j<(le / 6); j++)

for (i = 0; i<6; i++, s++) { }

a[j][i] = m[s];

//明文长度是6的倍数时

}

for (int i = 0; i < 6; i++) { }

cout << endl << \加密后的结果为:\; int q = 0;

for (int g = 0; g <= j; g++)

for (int h = 0; h < 6; h++, q++) { }

b[g][h] = a[g][zh[h] - 1]; //明文进行置换 bb[q] = b[g][h]; cout << bb[q]; zh[i] = 1;

for (int j = 0; j < 6; j++) { }

if (key[j] < key[i] || (j < i&&key[j] == key[i])) { }

zh[i]++;

return 0;

int ISD_zhihuan_decrypt() { }

int ss[6] = { 1,2,3,4,5,6 }; for (int w = 0; w<6; w++) { }

cout << endl << \解密后的结果为:\;

int t = 0;

for (int h = 0; h<6; h++, t++) { }

c[g][h] = b[g][zh1[h] - 1]; //明文进行逆置换 mw[t] = c[g][h]; for (int p = 0; p<6; p++) { }

if (ss[w] == zh[p])

zh1[w] = p + 1; //计算逆置换表

for (int g = 0; g <= j; g++)

return 0;


古典密码实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年最新版湘少版四年级上册英语教案全册表格式教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: