一款经典加密解密教学演示软件的开发毕业设计.docx
《一款经典加密解密教学演示软件的开发毕业设计.docx》由会员分享,可在线阅读,更多相关《一款经典加密解密教学演示软件的开发毕业设计.docx(57页珍藏版)》请在冰豆网上搜索。
![一款经典加密解密教学演示软件的开发毕业设计.docx](https://file1.bdocx.com/fileroot1/2023-2/1/aad30be9-1153-43e8-b9b8-be220f3609a8/aad30be9-1153-43e8-b9b8-be220f3609a81.gif)
一款经典加密解密教学演示软件的开发毕业设计
题目一款经典加密解密教学演示软件的开发
学生姓名汤阳学号1318042022
所在学院数学与计算机科学学院
专业班级计算机科学与技术计专升本1301班
指导教师李军___
完成地点陕西理工学院
2015年6月4日
本科毕业设计任务书
院(系)数学与计算机科学学院专业班级计算机科学与技术(专升本1301)学生姓名汤阳
一、毕业设计题目一款经典加密解密教学演示软件的开发
二、毕业设计工作自2014年12月9日起至2015年6月20日止
三、毕业设计进行地点:
陕西理工学院
四、毕业设计应完成内容及相关要求:
单码、多码以及多图加密技术在经典密码学中占据着及其重要的地位,也是现代密码学的基础。
要求设计一个演示软件,在该软件中能够用经典密码密码学中的几个典型的加密解密算法对文本进行加密与解密。
要求实现的功能:
1、实现仿射加密与解密
2、实现多文字加密与解密
3、实现Vigenere密与解密4、实现Hill加密与解密
五、毕业设计应收集资料及参考文献:
1、搜集关于经典密码学相关资料;
2、收集教学演示软件开发的案例及相关经验。
六、毕业设计的进度安排:
至2015-3-20 搜集文献材料,撰写开题报告
2015-3-20至2015-3-31 进行设计分析,确定设计方案
2015-4-01至2015-4-15 概要设计,构思设计平台的整体框架
2015-4-16至2015-5-15 详细设计、搭建平台,编写代码
2015-5-15至2015-5-25 软件测试、系统完善
2015-5-26至2015-6-05 撰写毕业设计说明书
2015-6-06至2015-6-10 整理资料、准备答辩及答辩
2015-6-11至2015-6-20 资料完善工作
指导教师签名专业负责人签名
学院领导签名批准日期
一款经典加密解密教学演示软件的开发
汤阳
(陕西理工学院数学与计算机科学学院计算机科学与技术计专升本1301班,陕西汉中723000)
指导教师:
李军
【摘要】为了在密码学教学过程中形象的展示加密解密这一过程,设计实现了一款经典加密解密教学演示软件。
该软件基于MicrosoftVisualC++6.0集成开发环境,采用C++面向对象程序设计方法,根据经典密码学中的单码加密、多码加密以及多图加密算法,实现了经典密码学中的仿射加密法、多文字加密法、Vigenere加密法和Hill加密法四种经典加密算法的教学演示效果。
【关键词】仿射加密法;多文字加密法;Vigenere加密法;Hill加密法
TheDevelopmentofAClassicalEncryptionAndDecryptionDemoSoftwareForTeaching
TangYang
(Grade13,UpgradedClass1,MajorComputerScienceandTechnology,SchoolofMathematicsandComputerScience.ShaanxiUniversityofTechnology,Hanzhong723000,Shaanxi)
Tutor:
LIJun
Abstract:
Inordertoshowtheprocessofencrypt and decryptintheteachingofclassicalcryptography,Ateachingdemosoftwareofaclassicalencryptionanddecryptionwasdeveloped.Accordingtothesinglecodeandmultiplecodeencryptionalgorithmofclassicalcryptography,Usingobject-orientedprogrammingmethod,implementationoftheaffineencryptionmethod,multipletextencryptionmethod,VigenereencryptionmethodandHillencryptionmethodinMicrosoftVisualC++6.0.
Keywords:
Affinemethod;Moretextmethod;Vigeneremethod;Hillmethod
1课题实施的背景
随着网络技术的发展,大量的数据需要在网络上进行传输,因此,信息安全受到了越来越广泛的关注。
近年来,我国数据窃取事件层出不穷,CSDN、珍爱网、世纪佳缘、走秀等多家网站的用户数据库被曝光在网络上,由于部分密码以明文方式显示,导致大量网民的个人信息泄露。
继CSDN、天涯社区用户数据泄露后,互联网行业一片人心惶惶,而在用户数据最为重要的电商领域,也不断传出用户信息漏洞,漏洞报告平台乌云发布漏洞报告称,支付宝用户大量泄露,被用于网络营销,泄露总量达1200万~2300万之多。
天猫商城、支付宝和当当网也已被卷入其中。
事实上,选择一种合适的加密机制将能消除消费者的各种信息安全隐患。
从古典密码学的研究到现代密码学的发展,密码学在我们生活中扮演着越来越重要的角色。
但由于密码学是神秘而富有冒险色彩的,它不仅仅是计算机科学的内容,因此,学习密码学必须具有宽广的知识背景。
加之,密码学是一个很抽象的东西,不容易理解,所以,学习经典密码学对于初学者来说具有一定的困难与挑战,如果有一套介绍加密解密算法的软件将抽象转换为形象,这势必要减少大量学习理解密码学知识的时间。
因此,本课题开发和研究的意义在于能形象生动的展示出经典密码学中单码、多码以及多图加密技术的加密和解密过程,有助于加强初学者对经典密码学的理解。
2仿射加密法
2.1算法概述
经典单码加密法的一个形式称为仿射加密法。
在传统仿射加密法中,字母表的字母被赋予一个数字,仿射加密法的密钥为0~25之间的数字对(m,n),m与26的最大公约数必须为1。
现在,假设p为明文字母的数字(译注:
即该字母在字母表中对应的数字),c为密文字母的数字,m-1为m的乘法的逆元,n-1为n的加法的逆元,那么,这两个数字之间的关系可以用如下等式表示:
由于传统的仿射加密算法只对26个字母进行加密,为了解决这一局限,对一般符号也能进行加密,从而采用ASCII码表作为加密参考,将模改为95(注:
ASCII码值有128个,由于前33个为不可显示字符,因此在加密的过程中排除,故将模改为95)。
因此,明文字母的数字p与密文字母的数字c之间的关系可表示为:
2.2算法分析
仿射加密法与单码加密替换没有什么不同,因为明文的每个字母分别只映射到一个密文字母。
例如,选取密钥为(2,7)。
(由于2与95的最大公约数为1,即GCD(2,95)=1,则2可以作为密钥中的a)。
因此,利用这个密钥,字“tangyang”可以使用放射加密法加密。
将“tangyang”转换成数字116、97、110、103、121、97、110、103,利用放射加密等式生成:
c(t)=((2×(116-32)+7)mod95)+32=112,即为数字“p”
c(a)=((2×(97-32)+7)mod95)+32=74,即为字母“J”
c(n)=((2×(110-32)+7)mod95)+32=100,即为字母“d”
c(g)=((2×(103-32)+7)mod95)+32=86,即为字母“v”
C(y)=((2×(121-32)+7)mod95)+32=122,即为字母“z”
注:
由于ASCII码表中前33个为不可显示字符,因此在加密运算过程中明文字母p要先减去32(ASCII码表中从0开始),求完模之后的结果再加上32,这样,对于(2,7)这个密钥,“tangyang”加密后变成了“pJdvzJdv”。
计算可得(95i+1)/a=a-1,将“pJdvzJdv”转换成数字112、74、100、86、122、74、100、86利用放射解密等式生成:
c(P)=(48×((112-32)-7)mod95)+32=116,即为字母“t”
c(J)=(48×((74-32)-7)mod95)+32=97,即为字母“a”
c(d)=(48×((100-32)-7)mod95)+32=110,即为字母“n”
c(v)=(48×((86-32)-7)mod95)+32=103,即为字母“g”
c(z)=(48×((122-32)-7)mod95)+32=110,即为字母“y”
这样,对于(2,7)这个密钥,“pJdvzJdv”解密后变成了“tangyang”
2.3核心代码
//加密函数
CStringCFCpasswd:
:
FCAddPass(CStringnewText,inta,intb)
{
intN,i;
charmida,c;
N=newText.GetLength();
Passwd=newchar[N];
char*m_a=newText.GetBuffer(newText.GetLength());//将字符串转换成字符数组
newText.ReleaseBuffer(newText.GetLength());
for(i=0;i{
mida=m_a[i]-32;
c=(a*mida+b)%95;
Passwd[i]=c+32;
}
Passwd[i]='\0';
newText.Format("%s",Passwd);
returnnewText;
}
intCFCpasswd:
:
getFa(inta)//求a逆
{
inti,n;
for(i=1;i<95;i++)
{
n=95*i+1;
if((n%a)==0)
returnn/a;
}
return-1;
}
CStringCFCpasswd:
:
FCRelessPass(CStringoldText,inta,intb)
{
intN,i,m_b;
charp,mida;
intfa=getFa(a);
if(fa==-1)return"";
N=oldText.GetLength();
obvious=newchar[N];
char*m_a=oldText.GetBuffer(oldText.GetLength());
oldText.ReleaseBuffer(N);
for(i=0;i{
mida=m_a[i]-32;
m_b=mida-b;
while(m_b<0)
m_b=m_b+95;
p=(fa*m_b)%95;
obvious[i]=p+32;
}
obvious[i]='\0';
oldText.Format("%s",obvious);
returnoldText;
}
3多文字加密法
3.1算法概述
多文字加密法是另一种脆弱的单码加密法,但是它与一般的单码加密法又有一些不同。
因为它是用一对字母来替代每个明文字母,加密后的密文是明文的两倍大。
多文字加密法的密钥是一个5×5的矩阵。
这个矩阵的5行和5列用含有5个字母的关键词来标识,该关键词不能有重复的字母。
字母表的每个字母填写在这个矩阵中。
当然,矩阵只有25个位置,而字母表有26个字母,因此字母“i”和“j”占同一个单元,这就意味着所有的“j”都变成了“i”。
例如,如果关键词为takes,那么密钥矩阵为:
表3.1密文、明文对照表
t
a
k
e
s
t
a
b
c
d
e
a
f
g
h
i
k
k
l
m
n
o
p
e
q
r
s
t
u
s
v
w
x
y
z
每个明文由标识该字母的行和列的字母对替代,加密过程为查找标识该字母的行和列的字母对的过程。
解密过程则为反向查找矩阵的过程。
3.2算法分析
在关键词为takes,明文为tangyang的情况下,加密解密过程如下:
加密过程:
密文“ee”替代了明文的“t”,密文“tt”替代了明文的“a”,以此类推,明文“tangyang”加密后的密文为”eettkkaasettkkaa”。
明文“t”替代了密文的“ee”,明文“a”替代了密文的“tt”,以此类推,密文“eettkkaasettkkaa”解密后的明文为“tangyang”。
3.3核心代码
//加密函数
CStringCMoreWordPasswd:
:
MWAddPass(CStringnewText,CStringpassKey)
{
inttextLen=newText.GetLength();
CStringresult;
intflag;//状态标志,1表示明文字符在字母表范围之内,0表示不在范围内
inti,j,k=0,n=0;
Passwd=newchar[2*textLen];//密文数组
obvious=newText.GetBuffer(textLen);//明文数组
newText.ReleaseBuffer(textLen);
char*chKey=passKey.GetBuffer(passKey.GetLength());//密钥数组
passKey.ReleaseBuffer(passKey.GetLength());
while(k{
flag=0;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
charmid=obvious[k];
if(mid=='j')
mid='i';
if(ArrayKey[i][j]==mid)
{
Passwd[n]=chKey[i];
Passwd[n+1]=chKey[j];
n=n+2;
flag=1;
break;
}
}
}
if(flag==0)
{
Passwd[n]=obvious[k];
n++;
}
k++;
}
Passwd[n]='\0';
result.Format("%s",Passwd);
returnresult;
}
//解密函数
CStringCMoreWordPasswd:
:
MWRelessPass(CStringoldText,CStringpassKey)
{
inttextLen=oldText.GetLength();
CStringresult;
intflag;
inti,j,k=0,n=0;
obvious=newchar[textLen/2];
Passwd=oldText.GetBuffer(textLen);
oldText.ReleaseBuffer(textLen);
char*chKey=passKey.GetBuffer(passKey.GetLength());
passKey.ReleaseBuffer(passKey.GetLength());
while(n{
flag=0;
for(i=0;i<5;i++)
{
if(Passwd[n]==chKey[i])
{
flag=1;
break;
}
}
if(flag==1)
{
for(j=0;j<5;j++)
{
if(Passwd[n+1]==chKey[j])
break;
}
}
if(flag==0){
obvious[k]=Passwd[n];
k++;
n++;
}
if(flag==1)
{
obvious[k]=ArrayKey[i][j];
k++;
n=n+2;
}
}
obvious[k]='\0';
result.Format("%s",obvious);
returnresult;
}
4Vigenere加密法
4.1算法概述
Vigenere加密法不同于上面的两种加密法,它是一个著名的多码加密法。
Vigenere加密法是基于关键词的加密系统,但不是像单码关键词加法那样使用关键词来定义替换模式的。
Vigenere加密法,关键词写在明文的上面,并且不断重复书写,这样每个明文字母都与一个关键词的字母关联,例如,关键词为“make”,而明文为“tangyang”的情况下,关联词--明文的关联如下所示:
表4.1密文、明文对照表
m
a
k
e
m
a
k
e
t
a
n
g
y
a
n
g
利用如图4.1所示的Vigenere表,这些字母对就可以用来确定明文字符的加密结果。
用密钥字母确定表的行,而明文字母确定表的列,表中行列交叉处的字母就是用来替代明文字母的密文字母。
表4.2vigenere表
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
b
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
c
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
d
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
e
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
f
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
g
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
h
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
i
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
j
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
k
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
l
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
m
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
n
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
o
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
p
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
q
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
s
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
t
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
u
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
v
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
w
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
x
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
y
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q