古典密码学Word下载.docx
- 文档编号:21510161
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:20
- 大小:287.41KB
古典密码学Word下载.docx
《古典密码学Word下载.docx》由会员分享,可在线阅读,更多相关《古典密码学Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
实验思路:
(1)加密过程为输入明文和密钥,将明文和密钥的长度进行比较,根据情况将密钥进行扩展,之后按照Vieneretable进行查表找到相对应的密文。
(2)解密过程和加密过程的原来基本相同,在这不进行赘述。
程序框图:
加/解密
Y
2、Columnpermutationcipher
实验前预习内容:
(1)预习有关Columnpermutationcipher加密和解密的原理。
(2)掌握二维数组的操作,利用二维数组将明文存放在矩阵当中。
(3)掌握排序算法,将密钥字母进行排序找到输出列的顺序。
实验思路:
(1)加密过程,将明文和密钥输入,将明文放入到矩阵当中,并且计算是否需要添加无效字符‘q’。
之后利用冒泡排序将密钥字符进行排序,得到读取列的顺序,进而将密文输出。
(2)解密过程,将密文和密钥输入,将密文排序以便恢复明文矩阵,之后进行列读取将明文矩阵恢复。
该过程和加密过程相似。
程序框图:
四、实验的步骤与调试方法
1、Vigenerecipher
实验步骤:
(1)建立win32consoleapplication工作空间。
(2)建立源文件。
(3)构建Vigenere表。
for(i=0;
i<
26;
i++)
{
for(j=0;
j<
j++)
{
table[i][j]=a[(j+i)%26];
}
}
(4)根据密钥和明文的长度情况扩展密钥。
if(key_len<
str_len)//如果密钥长度小于明文长度,扩展
{
for(i=key_len;
str_len;
key[i]=key[(i%key_len)];
}
(5)根据密钥和明文的对应情况,查表得到结果。
for(i=0;
for(j=0;
}
(6)解密过程和加密过程相似,只是在查表的时候为逆查表。
//在表中进行逆查表找到明文字母
for(j=0;
if(table[(key[i]-97)][j]==str[i])
printf("
%c"
table[0][j]);
(7)进行编译、链接、执行,按照提示输入密钥和明文(密文)。
遇到的问题和调试方法:
(1)在实验进行加密操作显示Vigeneretable时,总是出错,经过检查发现我忽略了在字母表移位过程后需要进行一次模操作,经过修改,Vigenertable正常显示。
2、Columnpermutationcipher
(3)确定矩阵的形状以及是否需要填充无效字符。
//计算矩阵的行数以及是否需要填充无效字符
t3=str_len%key_len;
//多出来的字符
if(t3==0)
line=str_len/key_len;
//明文矩阵的行数
add=0;
//需要填充的无效字符的个数
else
line=str_len/key_len+1;
add=key_len-t3;
(4)处理密钥,得到列读取顺序。
key_len;
i++)
{
num[i]=0;
j++)
if(key[j]<
=key[i])
num[i]=num[i]+1;
}
if(key[j]==key[i]&
&
j>
i)//字符相同的情况
num[i]=num[i]-1;
(5)将明文填充到矩阵当中,如果需要补充无效字符。
if(add!
=0)
add;
str[str_len+i]='
q'
;
line;
a[i][j]=str[i*key_len+j];
(6)之后按照列的顺序读取密文。
(7)解密过程和加密过程相似,只是恢复明文矩阵时为按列恢复。
a[j][num[i]-1]=str[i*line+j];
(8)进行编译、链接、执行,按照提示输入密钥和明文(密文)。
(1)在开始确定明文是否需要补充无效字符时,发现无法在矩阵最后加入无效字符,执行时发现程序中间便终止,无法正常进行,最后发现在补充无效字符时出现逻辑错误,将无效字符添加到了矩阵外,因而出现了错误,最后我将无效字符直接添加到了明文中,这样便可以直接将其填入明文矩阵。
五、实验数据与实验结果
程序开始的界面,如果加密则选择1,如果要进行解密操作选择2。
之后进行加密操作,密钥为cipher,明文为vigenerecipher。
进行解密过程,密钥为cipher,密文为xqvlrvtmrptygz(上文密文)。
经过上述过程,发现结果相同,因此,实验过程正确。
之后进行加密操作,密钥为cipher,明文为columnpermutation,得到的密文为cpaumomunlrioetntq
进行解密,密钥为cipher,密文为cpaumomunlrioetntq(上文密文)。
六、实验用程序清单(要有注释)
1、Vigenerecipher
#include<
stdio.h>
string.h>
stdlib.h>
voidencryption()
{
inti,j;
charkey[20];
//密钥
charstr[100];
//明文
intkey_len,str_len;
//密钥长度
chartable[26][26];
//表
chara[26]={'
a'
'
b'
c'
d'
e'
f'
g'
h'
i'
j'
k'
l'
m'
n'
o'
p'
r'
s'
t'
u'
v'
w'
x'
y'
z'
};
printf("
请输入密钥:
"
);
scanf("
%s"
&
key);
请输入明文:
str);
key_len=strlen(key);
str_len=strlen(str);
//明文长度
str_len)//如果密钥长度小于明文长度,扩展密钥
printf("
扩展密钥为:
key[i]);
/*printf("
\n显示表:
\n"
table[i][j]);
}*/
\n密文:
table[(str[i]-97)][(key[i]-97)]);
voiddecryption()
//密钥长度,密文长度
//密文
请输入密文:
//密文长度
str_len)
key[i]=key[(i%key_len)];
\n明文:
}
voidmenu()
********************VigenereCipher加解密过程********************\n"
1.加密\n"
2.解密\n"
voidmain()
inti;
menu();
请选择你要进行的操作:
%d"
i);
if(i==1)
system("
cls"
encryption();
decryption();
#include<
//加密过程
{
intnum[20];
//确定密文读取列数的顺序
chara[20][20];
//保存明文的矩阵
///密钥和明文的长度
intline,t3,add;
//填充的行数和需要补充的无效字符的个数
inti=0,j=0;
t3=str_len%key_len;
//处理密钥,确定读取密文读取顺序
密文列的读取顺序:
%d"
num[i]);
//输出密钥结果
//将明文填充到矩阵当中
//如果需要在矩阵中添加无效字符q
if(add!
将明文装填到矩阵当中\n"
//打印装填后的矩阵
a[i][j]);
密文为:
%c"
a[j][(num[i]-1)]);
//解密过程
///密钥和密文的长度
//确定读取列数的顺序
//明文矩阵
intline;
//行数
//处理密钥,确定读取密文读取顺序,以便恢复明文矩阵
//恢复明文矩阵
明文为"
********************列置换密码加解密********************\n"
七、思考题(必需回答)写明如下问题
1、Vigenere密码的原理是什么?
答:
原理是多表替代。
2、Vigenere密码的主要缺陷有哪些?
主要缺陷是密钥的重复书写和密钥短。
3、对Vigenere密码的分析方法有哪几种?
分析方法主要是Kasiski测试法和重合指数法。
4、对Vigenere密码的改进方法是什么?
对Vigenere密码的改进方法是Autokey密码。
5、Columnpermutationcipher的原理是什么?
原理是置换。
6、给定关键字为“experiment”,加密矩阵将包括几列,以及列置换的次序是什么?
加密矩阵有10列,列置换的顺序为第1,10,7,2,8,4,5,3,6,9列。
7、简述对Columnpermutationcipher的分析方法。
首先通过密文字符的长度确定矩阵的形状,之后进行频率分析来还原列的顺序。
8、Columnpermutationcipher的安全性增强方法是什么?
使用Double-Transposition密码。
八、结束语
通过本次试验我对Vigenere加密算法和Columnpermutation密码有了更加全面深入的认识,以前的学习只是停留在理论层面,而这次课程给了我实践的机会。
通过实验很好的把古典密码应用于现代密码加解密技术中。
在这个过程中我也学到了很多关于编程方面的知识,提高了自己的编程水平。
九、参考文献
1、RichardJ.Spillman:
《CLASSICAL
AND
CONTEMPORARY
CRYPTOLOGY》,清华大学出版社,2005-7
实验成绩
考查内容
分数
得分
做好实验内容的预习,写出预习报告
10
了解实验题目的调试方法
按实验要求预先设计好程序
认真记录实验数据并分析实验结果
实验后按要求书写实验报告,记录实验用数据及运行结果
30
创新能力强,在实验中设计的程序有一定的通用性,算法优化
20
实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 古典 密码学
![提示](https://static.bdocx.com/images/bang_tan.gif)