基于Misty1算法的加密软件JAVA的实现JAVA毕业设计论文.docx
《基于Misty1算法的加密软件JAVA的实现JAVA毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于Misty1算法的加密软件JAVA的实现JAVA毕业设计论文.docx(24页珍藏版)》请在冰豆网上搜索。
基于Misty1算法的加密软件JAVA的实现JAVA毕业设计论文
学位论文
基于Misty1算法的加密软件(Java)的实现
论文作者姓名:
XXX
申请学位专业:
申请学位类别:
论文提交日期:
XXXX年XX月XX日
基于Misty1算法的加密软件(Java)的实现
摘要
随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。
本文用JAVA语言开发了一个基于Misty1算法的加密软件,该软件能对文件进行加密和解密。
在具体实现时,首先分析了Misty1算法的基本结构,设计出相应的实施方法,正确实现了该算法,其次,设计了一个图形用户界面,最后对软件进行了测试,验证了实现方法的正确性。
关键词:
Misty1;Java;加密;解密
TheImplementationofEncryptionSoftware(Java)BasedonMisty1Algorithm
Abstract
Withtherapiddevelopmentofcomputernetworkstechnologyandcommunicationtechnology,Informationsecurityhasbecomeoneofthemostimportantproblemsurgenttoresolveininformationsociety,Cryptographictechnologyisthecoretechnologytoguaranteeinformationsecurity.Inthispaper,thesoftwareofencryptionbasedonMisty1algorithmisdevelopedbyusingJAVAlanguage.Itcanencryptanddecryptafile.Duringtheprocessofimplementation,thebasicstructureofthealgorithmisanalyzedfirstandthecounterpartmethodisdesigned,secondly,aGUIisdesigned,finally,thesoftwareistested,theresultshowsthatmethodofimplementationisright.
Keywords:
Misty1;Java;Encryption;Decrypt
论文总页数:
24页
1引言
1.1课题背景
现代密码学是一门迅速发展的应用科学。
随着因特网的迅速普及,人们依靠它传送大量的信息,但是这些信息在网络上的传输都是公开的。
因此,对于关系到个人利益的信息必须经过加密之后才可以在网上传送,这将离不开现代密码技术。
Misty1算法是在1996年公布的,它是一个分组密码算法,密钥长度是128位,明文长度是64位。
它是由在三菱工作的EisakuTakeda提交给NESSIE。
MISTY1可以在资源紧张的环境下实现。
整个算法是由递归等组成,每一个层次的结构又一稳妥的Feistel结构。
MISTY1是一迭代密码可以迭代超过8轮,或者更普遍,迭代4回。
它用128位密钥对64位数据进行不确定轮回的加密。
它采用了两个S-盒,一个7×7S-盒,s7,一个9×9S-盒,s9。
它取得了良好的良好的阻力线和鉴别攻击,而且还使能实行以相对较少的逻辑组件中执行函数的程度相对较低。
1.2国内外研究现状
随着我国对计算机的普及,计算机和通信技术已经在我国得到了广泛发展及应用,从而使我们对信息的安全存储、安全处理和安全传输的需要越来越迫切。
特别在Internet的应用中,以及个人通信、个人电子身份证、办公自动化,电子邮件、电子自动转帐支付系统和自动零售业务网的建立与实现,信息的安全保护问题已经显得十分突出,而能够解决这一问题的一个有效手段就是使用现代密码技术。
美国早在1977年就制定了本国的数据加密标准,即DES。
随着DES的出现,人们对分组密码展开了深入的研究和讨论,已有大量的分组密码,如DES的各种变形、IDEA算法、SAFER系列算法、RC系列算法、Skipjack算法、FEAL系列算法、REDOC系列算法、CAST系列算法Khufu,KhafreMMB,3-WAY,TEA,Blowfish,GOST,SQUARE,MISTY,Rijndael算法和AES15种候选算法(第一轮),另有NESSIE17种候选算法(第一轮)等。
目前分组密码所采用的整体结构可分为Feistel结构(例如CAST—256、DEAL、DFC、E2等)、SP网络(例如Safer+、Serpent等)及其他密码结构(例如Frog和HPC)。
加解密相似是Feistel型密码的一个实现优点,但它在密码的扩散似乎有些慢,例如需要两轮才能改变输入的每一个比特。
SP的网络结构非常清晰,S一般被称为混淆层,主要起混淆作用。
P一般被称为扩散层,主要起扩散作用。
在明确S和P的某些密码指标后,设计者能估计SP型密码抵抗差分密码分析和线性密码分析的能力。
SP网络和Feistel网络相比,可以得到更快速的扩散,但是SP密码的加/解密通常不相似。
目前对分组密码安全的讨论主要包括差分密码分析、线性密码分析和强力攻击等。
从理论上讲,差分密码分析和线性密码分析是目前攻击分组密码的最有效的方法,而从实际上说,强力攻击是攻击分组密码最可靠的方法。
到目前为止,已有大量文献讨论各种分组密码的安全性,同时推出了譬如截断差分分析、非线性密码分析及插值攻击等多种分析方法。
自AES候选算法公布以后,国内外许多专家学者都致力于候选算法的安全分析,预计将会推出一些新的攻击方法,这无疑将进一步推动分组密码的发展。
1.3本课题研究的意义
标准化是工业社会的一个基本概念,它意味着生产规模化、降低成本、方便维修和更换为了实现非相关团体之间的保密通信,加密体制的标准化是必要的。
分组密码由于其固有特点,已经成为标准化进程的首选体制。
信息安全的最大特点之一是自主性,因而其核心技术——密码学的研究与开发应当是一种本土性的科学。
对于有些产品,可以通过外方引进来解决由于技术落后而带来的问题。
然而对于安全产品,除非能完全确信它在硬件和软件上没有陷门,否则,贸然使用可能带来不可预测的后果。
而要做到软硬件上的确认通常是十分困难的。
因此,最明智的方法是依靠自己的力量并汲取现有的先进经验进行研究、设计和开发。
为了维护通信安全、打击犯罪,1993年4月,美国政府宣布了一项新的建议,该建议倡导联邦政府和工业界使用新的具有密钥托管功能的联邦加密标准。
该建议称为托管加密标准(escrowedencrytionstandard,EES),又称C1ipper建议。
其目的是为用户提供更好的安全通信方式,同时允许政府机构在必要情况下进行监听。
EES系统中嵌入了分组加密算法Sk-ipjack,尽管目前对该系统和算法有许多争议,但从维护国家通信安全的角度,这项建议是有积极意义的。
在区域通信系统中,用户较多,他们的地位、作用都不相同,所流通的信息的重要性也不可能完全相同,因此他们要求得到的安全保护等级也不应该相同。
由此可见,研究多安全级密码算法非常必要。
迭代分组密码(所谓选代分组密码就是以迭代一个简单的轮函数为基础的密码,即通过选择某个较简单的密码变换,在密钥控制下以迭代方式多次利用它进行加密变换,例如Feistel型密码就是一种选代密码,是分组密码的典型代表,其数学思想简单而灵巧。
特别是在相同的轮函数之下,迭代次数的不同即代表了安全强度的不同级别。
在Internet/Intranet中随着通信量和业务种类的增加,对安全认证和保密业务的需求日益迫切。
比如,PGP(PrettyGoodPrivacy)就是一种广泛应用于Internet中E-mail系统的一种安全技术方案,它也可以用于其他网络中。
PGP的安全业务包括机密性、认证性、不可抵赖性等,其中的机密性就是利用分组密码算法IDEA来保证的。
另外,分组密码的工作模式可提供一些人们所需要的其他密码技术,比如流密码技术和杂凑技术等。
1.4本课题的研究方法
研究相关资料,理解Misty1算法的原理,并参考学习使用其他编程语言编写的基于此算法的加密软件的代码。
深入学习Java编程语言,熟悉其编写程序的流程。
然后尝试用Java来实现Misty1算法,能对数据进行加密和解密。
对程序进行测试,对测试结果进行分析研究,进而对程序进行改进,对关键算法代码进行尽可能的优化,最终得到一个在windows运行的可以用指定密钥对文件进行MISTY1加密并可解密的完整应用程序。
2Misty1算法描述
MISTY1算法是用128位密钥对64位数据进行不确定轮回的加密。
它在设计时就采用了经证实可以抵抗密码微分分析和线形分析的安全理论,而且它实现了在硬件环境和软件环境下都比较高的加密速度。
算法可以分为两部分,一部分是密钥的产生部分,另一部分是数据随机化部分。
密钥产生部分根据128位的输入密钥,产生128位的扩展密钥。
数据随机化部分输入64位的数据进行混合,也就是所谓的加密。
2.1秘钥产生部分
K为输入密钥,K’为扩展密钥,K和K’都是128位,扩展密钥是由函数FI从K,1,...K,8中产生,并存储在K,9,...,K,16中。
Ki代表K的一个元素,1≤i≤8,每个的长度为16位;然后Ki被认为作输入到FI,Ki+1作为FI模的密钥。
FI模的输出是16位的K,i,1≤i≤8,K9=K1(图2-1)
图2-1密钥产生
K=K1‖K2‖K3‖K4‖K5‖K6‖K7‖K8
fori=1to8do
K,i=FI(Ki,Ki+1)
K,=K,1‖K,2‖K,3‖K,4‖K,5‖K,6‖K,7‖K,8
2.2数据随机化部分
数据随机化部分使用了两种函数,FO和FL,函数FO调用函数FI。
密钥扩展部分也使用函数FI。
FI函数使用两个S盒,S7和S9。
2.3函数描述
2.3.1FI函数
FI函数将16位输入分为两部分L0和R0(图2-2)
图2-2FI函数
FI的输入为:
X16=L0‖R0
KIij=KIijL‖KIijR
FI则定义为:
R1=S9[L0]∧(00b‖R0)
L1=R0
R2=S7[L1]∧(truncate(R1))KIijL
R3=S9[L2]∧(00b‖R2)
L3=R2
Y16=L3‖R3
FI函数程序代码:
publicintFI(intx,intKI)//FI函数
{
intL1,L2,L3,R1,R2,R3;
R1=S9[((x>>7)&0x1FF)]^(x&0x007F);
L1=x&0x7F;
R2=S7[L1]^(R1&0x7F)^((KI>>9)&0x7F);
L2=R1^(KI&0x1FF);
R3=S9[L2]^R2;
L3=R2;
return(L3<<9)|R3;
}
2.3.2FO函数
FO函数将32位的输入X32分为两个16位的L0和R0(图2-3)
图2-3FO函数
FO的输入为:
X32=L0‖R0
KOi=KOi1‖KOi2‖KOi3‖KOi4
KIi=KIi1‖KIi2‖KIi3
FO的功能能表现为:
fori=1to3do:
Rj=FI(Lj-1∧KOij,KIij)∧Rj-1
Lj=Rj-1
Y32=(L3∧KOi4)R3