版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE第1页共29页毕业设计(论文)基于Misty1算法的加密软件(Java)的实现论文作者姓名:申请学位专业:申请学位类别:论文提交日期:基于Misty1算法的加密软件(Java)的实现摘要随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。本文用JAVA语言开发了一个基于Misty1算法的加密软件,该软件能对文件进行加密和解密。在具体实现时,首先分析了Misty1算法的基本结构,设计出相应的实施方法,正确实现了该算法,其次,设计了一个图形用户界面,最后对软件进行了测试,验证了实现方法的正确性。关键词:Misty1;Java;加密;解密
TheImplementationofEncryptionSoftware(Java)BasedonMisty1AlgorithmAbstractWiththerapiddevelopmentofcomputernetworkstechnologyandcommunicationtechnology,Informationsecurityhasbecomeoneofthemostimportantproblemsurgenttoresolveininformationsociety,Cryptographictechnologyisthecoretechnologytoguaranteeinformationsecurity.Inthispaper,thesoftwareofencryptionbasedonMisty1algorithmisdevelopedbyusingJAVAlanguage.Itcanencryptanddecryptafile.Duringtheprocessofimplementation,thebasicstructureofthealgorithmisanalyzedfirstandthecounterpartmethodisdesigned,secondly,aGUIisdesigned,finally,thesoftwareistested,theresultshowsthatmethodofimplementationisright.Keywords:Misty1;Java;Encryption;Decrypt目录论文总页数:24页1 引言 11.1 课题背景 11.2 国内外研究现状 11.3 本课题研究的意义 21.4 本课题的研究方法 32 Misty1算法描述 32.1 秘钥产生部分 32.2 数据随机化部分 42.3 函数描述 42.3.1 FI函数 42.3.2 FO函数 52.3.3 FL函数 72.3.4 FL-1函数 83 Misty1加密软件的设计与实现 93.1 工作环境介绍 93.2 Java及程序编辑工具介绍 93.2.1 Java介绍 93.2.2 程序编辑工具介绍 103.3 Misty1算法应用于文件加密的分析 123.4 Misty1算法的实现 133.4.1 加密 133.4.2 解密 153.5 设计流程图、图形界面及事件处理 183.5.1 加密/解密流程图 183.5.2 图形界面 183.5.3 处理按钮事件 204 程序演示 214.1 程序演示 214.2 结果及存在的问题 21结论 22参考文献 22致谢 23声明 24第23页共24页引言课题背景现代密码学是一门迅速发展的应用科学。随着因特网的迅速普及,人们依靠它传送大量的信息,但是这些信息在网络上的传输都是公开的。因此,对于关系到个人利益的信息必须经过加密之后才可以在网上传送,这将离不开现代密码技术。Misty1算法是在1996年公布的,它是一个分组密码算法,密钥长度是128位,明文长度是64位。它是由在三菱工作的EisakuTakeda提交给NESSIE。MISTY1可以在资源紧张的环境下实现。整个算法是由递归等组成,每一个层次的结构又一稳妥的Feistel结构。MISTY1是一迭代密码可以迭代超过8轮,或者更普遍,迭代4回。它用128位密钥对64位数据进行不确定轮回的加密。它采用了两个S-盒,一个7×7S-盒,s7,一个9×9S-盒,s9。它取得了良好的良好的阻力线和鉴别攻击,而且还使能实行以相对较少的逻辑组件中执行函数的程度相对较低。国内外研究现状随着我国对计算机的普及,计算机和通信技术已经在我国得到了广泛发展及应用,从而使我们对信息的安全存储、安全处理和安全传输的需要越来越迫切。特别在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候选算法公布以后,国内外许多专家学者都致力于候选算法的安全分析,预计将会推出一些新的攻击方法,这无疑将进一步推动分组密码的发展。本课题研究的意义标准化是工业社会的一个基本概念,它意味着生产规模化、降低成本、方便维修和更换为了实现非相关团体之间的保密通信,加密体制的标准化是必要的。分组密码由于其固有特点,已经成为标准化进程的首选体制。信息安全的最大特点之一是自主性,因而其核心技术——密码学的研究与开发应当是一种本土性的科学。对于有些产品,可以通过外方引进来解决由于技术落后而带来的问题。然而对于安全产品,除非能完全确信它在硬件和软件上没有陷门,否则,贸然使用可能带来不可预测的后果。而要做到软硬件上的确认通常是十分困难的。因此,最明智的方法是依靠自己的力量并汲取现有的先进经验进行研究、设计和开发。为了维护通信安全、打击犯罪,1993年4月,美国政府宣布了一项新的建议,该建议倡导联邦政府和工业界使用新的具有密钥托管功能的联邦加密标准。该建议称为托管加密标准(escrowedencrytionstandard,EES),又称C1ipper建议。其目的是为用户提供更好的安全通信方式,同时允许政府机构在必要情况下进行监听。EES系统中嵌入了分组加密算法Sk-ipjack,尽管目前对该系统和算法有许多争议,但从维护国家通信安全的角度,这项建议是有积极意义的。在区域通信系统中,用户较多,他们的地位、作用都不相同,所流通的信息的重要性也不可能完全相同,因此他们要求得到的安全保护等级也不应该相同。由此可见,研究多安全级密码算法非常必要。迭代分组密码(所谓选代分组密码就是以迭代一个简单的轮函数为基础的密码,即通过选择某个较简单的密码变换,在密钥控制下以迭代方式多次利用它进行加密变换,例如Feistel型密码就是一种选代密码,是分组密码的典型代表,其数学思想简单而灵巧。特别是在相同的轮函数之下,迭代次数的不同即代表了安全强度的不同级别。在Internet/Intranet中随着通信量和业务种类的增加,对安全认证和保密业务的需求日益迫切。比如,PGP(PrettyGoodPrivacy)就是一种广泛应用于Internet中E-mail系统的一种安全技术方案,它也可以用于其他网络中。PGP的安全业务包括机密性、认证性、不可抵赖性等,其中的机密性就是利用分组密码算法IDEA来保证的。另外,分组密码的工作模式可提供一些人们所需要的其他密码技术,比如流密码技术和杂凑技术等。本课题的研究方法研究相关资料,理解Misty1算法的原理,并参考学习使用其他编程语言编写的基于此算法的加密软件的代码。深入学习Java编程语言,熟悉其编写程序的流程。然后尝试用Java来实现Misty1算法,能对数据进行加密和解密。对程序进行测试,对测试结果进行分析研究,进而对程序进行改进,对关键算法代码进行尽可能的优化,最终得到一个在windows运行的可以用指定密钥对文件进行MISTY1加密并可解密的完整应用程序。Misty1算法描述MISTY1算法是用128位密钥对64位数据进行不确定轮回的加密。它在设计时就采用了经证实可以抵抗密码微分分析和线形分析的安全理论,而且它实现了在硬件环境和软件环境下都比较高的加密速度。算法可以分为两部分,一部分是密钥的产生部分,另一部分是数据随机化部分。密钥产生部分根据128位的输入密钥,产生128位的扩展密钥。数据随机化部分输入64位的数据进行混合,也就是所谓的加密。秘钥产生部分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‖K8fori=1to8doK,i=FI(Ki,Ki+1)K,=K,1‖K,2‖K,3‖K,4‖K,5‖K,6‖K,7‖K,8数据随机化部分数据随机化部分使用了两种函数,FO和FL,函数FO调用函数FI。密钥扩展部分也使用函数FI。FI函数使用两个S盒,S7和S9。函数描述FI函数FI函数将16位输入分为两部分L0和R0(图2-2)图2-2FI函数FI的输入为:X16=L0‖R0KIij=KIijL‖KIijRFI则定义为:R1=S9[L0]∧(00b‖R0)L1=R0R2=S7[L1]∧(truncate(R1))KIijLR3=S9[L2]∧(00b‖R2)L3=R2Y16=L3‖R3FI函数程序代码: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;}FO函数FO函数将32位的输入X32分为两个16位的L0和R0(图2-3)图2-3FO函数FO的输入为:X32=L0‖R0KOi=KOi1‖KOi2‖KOi3‖KOi4KIi=KIi1‖KIi2‖KIi3FO的功能能表现为:fori=1to3do:Rj=FI(Lj-1∧KOij,KIij)∧Rj-1Lj=Rj-1Y32=(L3∧KOi4)R3FO函数程序代码:publiclongFO(longx,inty,intz)//FO函数{inti;intKOS[]=newint[4];intKIS[]=newint[3];System.arraycopy(KO,y,KOS,0,KOS.length);System.arraycopy(KI,z,KIS,0,KIS.length);intL1,L2,L3,R1,R2,R3; R1=FI((KO[0]^((int)(x>>16)&0xFFFF)),KI[0])^((int)(x&0xFFFF));L1=(int)(x&0xFFFF);R2=FI((L1^KO[1]),KI[1])^R1; L2=R1;R3=FI((L2^KO[2]),KI[2])^R2;L3=R2^KO[3];return(((long)L3)<<16)|((long)R3);}FL函数函数FL用于加密。它采用32位的输入数据X32,将X32分为两个16位即XL和XR。另外一个是扩展密钥的下标KEY,返回一个32位的数据Y32(图2-4)图2-4FL函数FL的输入为:X32=XL‖XRKLi=KLiL‖KLIrFL的功能为:YR=(XL&KLiL)∧XRYL=(YR|KLIr)∧XL则输出:Y32=YL‖YRFL函数程序代码:publiclongFL(longx,longkey)//FL函数{ longXL,XR,KL,KR,YL,YR; XL=x>>16;XR=x&0x0000FFFF; KL=key>>16;KR=key&0x0000FFFF;YR=(XL&KL)^XR;YL=(YR|KR)^XL;return(YL<<16)|YR;}FL-1函数FL-1函数是逆向的FL函数,用于解密。它将32位的输入Y32分为两个16位的YL和YR,与KLi进行计算,返回一个X32(图2-5)图2-5FL-1函数FL-1输入为:Y32=YL‖YRKLi=KLiL‖KLIrFL-1的功能:XL=(YR|KLIr)∧YLXR=(XL&KLiL)∧YR则输出:X32=XL‖XRFL-1函数程序代码:publiclongFLINV(longy,longkey)//FLINV函数,FL函数的逆{ longXL,XR,KL,KR,YL,YR;YL=y>>16;YR=y&0x0000FFFF;KL=key>>16;KR=key&0x0000FFFF;XL=(YR|KR)^YL;XR=(XL&KL)^YR;return(XL<<16)|XR;}Misty1加密软件的设计与实现工作环境介绍本设计使用的编程语言为Java,使用Java2PlatformStandardEdition5.0。操作系统为WindowsXP,CPU为AMPXP2500+,内存256M。Java及程序编辑工具介绍Java介绍Java是1995年5月23日由Sun公司引进到我们这个世界的革命性编程语言,它被美国的著名杂志《PCMagazine》评为1995年是大优秀科技作品。之所以称Java为革命性编程语言,是因为传统的软件往往与具体的实现环境有关,一旦环境有所变化就需要对软件做一番改动,耗时耗力,而Java编写的软件能在执行码上兼容。这样,只要计算机提供了Java解释器,用Java编写的软件就能在其上运行。Java的优点主要有以下几点:(1)Writeonce,runanywhere这句话一直是Java程序员的精神指南,也是Java之所以能够受到程序设计师们喜爱的原因之一,最大原因就是JVM技术。(2)简单纯面向对象的特性,再加上众多类库的支持,使用Java开发各式各样的应用程序,可以说是易如反掌。除此之外,无论在调试或是程序修改、增加新功能方面,因为对象的特性,使得这些维护也变得非常容易。(3)安全性Java的很多功能都是针对安全性的问题考虑的,Java甚至可以对于不同的安全需求而Java应用程序的安全等级。原则上一个未经您允许的Java程序,是不可能伤及你的系统的。(4)UnicodeJava使用Unicode作为他的标准字符,这项特性使得Java的程序在不同语言的平台上都能编写和执行。Java也是目前所有电脑语言中,唯一天生使用Unicode的语言。(5)网络Java可以说是借助互联网而重声的,自然对于具备网络功能程序的编写,也是非常容易的。不论是一般互联网的程序Socket、Email,还是服务器网页的程序Servlets、JSP,甚至分布式网络程序CORBA等的相关套件支持,可以说是非常丰富,使用起来也是非常容易。(6)资源回收处理资源回收处理是由JVM协助我们的程序对内存做动态的管理,你的程序需要多少内存、那些对象的内存已经不使用了,需要归还给系统,这些烦琐且危险的工作全部交由JVM去帮我们管理,让我们能够更专心的写程序,不需要担心内存的问题,而内存的统一管理,对于跨平台也用相当的帮助。(7)异常处理为了使Java程序更安全、更稳定,那么程序随机应变的能力就必须好。Java引入了异常处理机制,能够在程序中比较可能有异常情况发生的地方,加上相对应的处理,让程序不至于因为突发的错误,造成执行中断或是当机的情况。异常处理也让用户更恩能够控制整个程序执行的流程,也使得程序的设计更加严谨。目前Java的主要应用在于电子商务及企业电子化部分。除此之外,Java也渐渐地在消费性电子平台上发挥它跨平台的特性,各手机厂商、PDA厂商也纷纷地发表内置JVM的系统,Java在这方面跟其他程序语言比起来,可以说是如鱼得水。未来,除了SUN公司更加强J2EE、J2SE和J2ME中的功能外,Java还会更进一步的结合XML,把现在外挂的XML套件包含进Java标准套件中,那么对于跨平台来说将更是如虎添翼。Java的未来可以说是一片光明。程序编辑工具介绍UltraEdit是很多人爱用的文本编辑软件,它除了单纯的文本编辑外,对于一些特殊的文件,例如Java、ASP等等,都会辨别出它们的关键字或是字符串、数字等,然后用不同的颜色表示它们,让你更容易看出程序中有些什么,或是有没有什么关键字输入错了。除此之外它也可以简单地帮你做错字的更正。不过它最强的地方在于能设定一些宏(Macro),让你可以自行设计额外的特殊功能。图3-1程序编辑工具UltraEditUltraEdit有一项执行外部指令的功能,还可以把执行结果显示出来。好处是可以把DOS模式的结果显示在一个新的文件里,这样一来再多的信息也不怕遗漏了。使用方法很简单,就到菜单栏上选择“高级”→“DOS命令”,快捷键是“F9”。在“命令”处输入在DOS模式下要输入的编译指令,在“工作目录”处选择程序所在目录图3-2好用的功能图3-3DOS命令执行后界面Misty1算法应用于文件加密的分析Misty1是对称密钥加密,也是分组密码。分组密码是将明文划分为固定度的数据组,然后以组为单位进行加密,分组密码优点是不需同步。实质是,设计一种算法,能在密钥控制下,把n比特明文简单而又迅速地置换成唯一n比特密文,并且这种变换是可逆的(解密)。设计思想:“扩散”将明文及密钥的影响尽可能迅速地散布到较多个输出的密文中(将明文冗余度分散到密文中)。产生扩散的最简单方法是通过“置换”(比如:重新排列字符)。“混淆”其目的在于使作用于明文的密钥和密文之间的关系复杂化,是明文和密文之间、密文和密钥之间的统计相关特性极小化,从而使统计分析攻击不能奏效。通常的方法是“代换(Substitution)”(比如恺撒密码)。分组密码设计的要求:1、分组长度足够大(64~128比特);2、密钥量要足够大(64~128);3、算法足够复杂(包括子密钥产生算法)4、加密、解密算法简单,易软、硬件实现5、便于分析(破译是困难的,但算法却简洁清晰)。所以把Misty1应用于文件加密是可行的。在对称密码技术中,其加密密钥和解密密钥相同。加密信息的安全性取决于密钥的安全性,与算法的安全性无关,即由密文和加解密算法不可能得到明文。换句话说算法无需保密,需保密的仅是密钥。对于带有重要信息的小型文本和二进制数据的维护,如果不加密,将无法放心的保存在计算机上,尤其是联网的或机房里的公共计算机;如果借助功能强大的大型多用户数据保护程序维护几个小型文件,显得十分烦琐,好比杀鸡用牛刀。所以,对于使用小型文件进行数据交换的情况,更好的方案是通过一个小型应用程序对这些文件进行对称密钥加密。为了适合前面叙述的在公共BBS与特定的某人交流重要保密信息的情况,加密生成的数据应该是文本,这样可以方便复制粘贴。Misty1算法的实现加密64位的明文输入P分为两部份分别为32位L0和R0,在第一轮回和之后的每两个轮回,左边和右边的两部分Li-1和Ri-1分别与KLi通过FL函数产生32位的输出。在每次轮回中的左边部份调用接受32位输入和48位密钥KIi以及64位的密钥KOi的FO函数,产生32位的输出。这种输出是右边部分新的一部分。在每一次轮回中,左边部分和右边部分相互交换给Li和Ri。经过8次轮回最后一次调用KL函数得到左部和右部,然后再作最后的重组左边和右边即Ln+1和Rn+1产生64位输出C64,其中n是轮回的次数(一般为8)。(图3-1)图3-1加密其中加密输入为:P=L0‖R0KL={KLi}KO={KOi}KI={KIi}加密函数则是:fori=1,3,...,n-1;Ri=FL(Li-1,KLi)Li=FL(Ri-1,KLi+1)^FO(Ri,KOi,KIi)Li+1=Ri^FO(Li,KOi+2,KIi+1)Ri+1=Lifori=n+1;Ri=FL(Li-1.KLi)Li=FL(Ri-1.KLi+1)最后输出:C=Ln+1‖Rn+1下面是加密部分代码:publicvoidEncrypt(charptext[],charuserkey[],charctext[]){longL0,L1,L2,L3,L4,L5,L6,L7,L8,L9;longR0,R1,R2,R3,R4,R5,R6,R7,R8,R9;KeySchedule(userkey);//轮回,加密L0=(((long)ptext[0])<<24)+(((long)ptext[1])<<16)+(((long)ptext[2])<<8)+((long)ptext[3]);R0=(((long)ptext[4])<<24)+(((long)ptext[5])<<16)+(((long)ptext[6])<<8)+((long)ptext[7]);R1=FL(L0,KL[0]); L1=FO(R1,0,0)^FL(R0,KL[1]); R2=L1; L2=FO(R2,4,3)^R1; R3=FL(L2,KL[2]); L3=FO(R3,8,6)^FL(R2,KL[3]); R4=L3; L4=FO(R4,12,9)^R3; R5=FL(L4,KL[4]);L5=FO(R5,16,12)^FL(R4,KL[5]);R6=L5;L6=FO(R6,20,15)^R5;R7=FL(L6,KL[6]);L7=FO(R7,24,18)^FL(R6,KL[7]);R8=L7;L8=FO(R8,28,21)^R7;R9=FL(L8,KL[8]);L9=FL(R8,KL[9]);//最后一轮 ctext[0]=(char)((L9>>24)&0XFF);ctext[1]=(char)((L9>>16)&0XFF);ctext[2]=(char)((L9>>8)&0XFF);ctext[3]=(char)(L9&0XFF);ctext[4]=(char)((R9>>24)&0XFF);ctext[5]=(char)((R9>>16)&0XFF);ctext[6]=(char)((R9>>8)&0XFF);ctext[7]=(char)(R9&0XFF);}解密解密函数运行与加密运行完全相同,只需要改变两项:(1)FL-1函数取代所有的FL函数;(2)命令中的子密钥的应用都扭转。(图3-2)图3-2解密解密部分代码:publicvoidDecrypt(charctext[],charuserkey[],charptext[]){longL0,L1,L2,L3,L4,L5,L6,L7,L8,L9,longR0,R1,R2,R3,R4,R5,R6,R7,R8,R9;KeySchedule(userkey); //反顺序轮回,解密 L9=(((long)ctext[0])<<24)+(((long)ctext[1])<<16)+(((long)ctext[2])<<8)+((long)ctext[3]); R9=(((long)ctext[4])<<24)+(((long)ctext[5])<<16)+(((long)ctext[6])<<8)+((long)ctext[7]);R8=FLINV(L9,KL[9]);L8=FO(R8,28,21)^FLINV(R9,KL[8]);R7=L8;L7=FO(R7,24,18)^R8;R6=FLINV(L7,KL[7]);L6=FO(R6,20,15)^FLINV(R7,KL[6]);R5=L6;L5=FO(R5,16,12)^R6;R4=FLINV(L5,KL[5]);L4=FO(R4,12,9)^FLINV(R5,KL[4]);R3=L4;L3=FO(R3,8,6)^R4;R2=FLINV(L3,KL[3]);L2=FO(R2,4,3)^FLINV(R3,KL[2]);R1=L2;L1=FO(R1,0,0)^R2;R0=FLINV(L1,KL[1]);L0=FLINV(R1,KL[0]);//最后一轮 ptext[0]=(char)((L0>>24)&0XFF);ptext[1]=(char)((L0>>16)&0XFF);ptext[2]=(char)((L0>>8)&0XFF);ptext[3]=(char)(L0&0XFF);ptext[4]=(char)((R0>>24)&0XFF);ptext[5]=(char)((R0>>16)&0XFF);ptext[6]=(char)((R0>>8)&0XFF);ptext[7]=(char)(R0&0XFF);}设计流程图、图形界面及事件处理加密/解密流程图在相应文本框中输入明文/密文在相应文本框中输入明文/密文输入密钥点击“加密”/“加密”按钮从文本框中读取明文/密文,转换为char类型传入相应数组调用加密/解密函数将结果转换为字符串类型输出到相应文本框引发按钮事件图3-3设计流程图图形界面Java中有2个重要且常用的容器(Container),一个是Frame,另一个是Panal。本设计的图形界面使用的是Frame。为了使界面一目了然,不至于混淆,往容器添加AWT元件时就需要按一定的方案。Java特别设计了Laout这个机制来解决元件版面配置的问题。Java.awt包中总工提供了五个基本的Layout类,本设计使用的是GridLayout。图3-4图形界面图形界面部分代码:f=newFrame("Misty1算法");b1=newButton("加密");b2=newButton("解密");b1.addActionListener(this);b2.addActionListener(this);t1=newTextField("",20);t2=newTextField("",20);t3=newTextField("",20);t4=newTextField("",20);Labelk1,k2,k3,k4,k5,k6;k1=newLabel("明文(8字节)");k2=newLabel("密钥(16字节)");k3=newLabel("密文(8字节)");k4=newLabel("解密后的明文(8字节)");k5=newLabel("");k6=newLabel("");f.setLayout(newGridLayout(4,3));f.add(k1);f.add(t1);f.add(k5);f.add(k2);f.add(t2);f.add(b1);f.add(k3);f.add(t3);f.add(b2);f.add(k4);f.add(t4);f.add(k6);f.pack();f.setVisible(true);处理按钮事件当用户单击按钮时就发生一个事件。对于按钮这个事件源,它有一个事件,就是单击按钮。这个事件源获得监视器的方法是:addActionListener()。处理该事件的接口是ActionListener,接口中的方法是actionPerformer(ActionEvente)。单击按钮事件的类型是ActionEvent类型,即当用户单击按钮后,Java包java.awt.envent中的类ActionEvent自动创建了一个事件对象。在用户单击按钮后,将用户在文本框中输入的字符串数据转换为数组数据,传入程序对应的数组,然后程序调用函数进行运算,最后把得出的结果转换为字符串数据,输出到指定文本框位置。按钮事件处理部分代码:publicvoidactionPerformed(ActionEvente)//接口实现方法{ 函数hxdx=new函数();//产生函数对象 if(e.getSource()==b1) { charplaintext1[]=(t1.getText()).toCharArray();charkey[]=(t2.getText()).toCharArray();charciphertext1[]=newchar[8]; hxdx.Encrypt(plaintext1,key,ciphertext1); t3.setText(String.valueOf(ciphertext1)); } elseif(e.getSource()==b2) { charkey[]=(t2.getText()).toCharArray(); charciphertext1[]=(t3.getText()).toCharArray(); charplaintext1[]=newchar[8]; hxdx.Decrypt(ciphertext1,key,plaintext1); t4.setText(String.valueOf(plaintext1)); } }程序演示程序演示图4-1DOS下运行的情况图4-2图形界面加密图4-3图形界面解密结果及存在的问题目前完成了对Misty1算法的代码编写,能够实现用指定密钥对输入数据进行加密并能够解密。但这只是基本工作,还有一些功能有待完善和实现。主要有以下几个方面:(1)暂时无法实现对文本文档载入进行加密;(2)加密有些数据可能会出现异常;(3)部分代码还不够简洁。希望通过继续学习Java编程技术,找到问题的关键,对程序进一步完善。结论通过较长时间的程序设计和开发,基于MISTY1算法的加密软件系统基本开发完毕。在对MISTY1算法和加密软件的实现过程详细的介绍中,了解到MISTYI算法进行文件加密的优点和算法的实现的大概过程,以及其中各个函数的意义。本系统以JAVA为开发语言,采用JAVA语言为开发语言是因为它是网络应用方面最广泛使用的语言。在具体实现中,首先实现MISTY1算法的各组成模块,并验证实现的正确性,然后将各模块进行联调,完成整个算法的实现,最后设计一个图形界面。该软件能对文件进行正确的加密和解密。不足之处在于功能比较单一,使用起来不是特别快捷。参考文献[1]林德敬,林柏钢,林德清.国内外分组密码理论与技术的研究现状及发展趋势[EB]./files/wx/tjtxjs/2002-4/1.htm,2004-4。[2]朱仲杰.Java2全方位学习(J2SE5.0增修版)[M].北京:机械工业出版社,2006。[3]耿祥义.张跃平.JAVA2实用教程(修订)[M].北京:清华大学出版社,2001。[4]叶至军.Java2自学教程[M].北京:人民邮电出版社,2004.10。[5]宋智平.MISTY1加密算法描述[EB]./rfc/RFC2994.txt,2001.4。[6]陈鲁生等.现代密码学[M].北京:科学出版社,2002.7。[7]张仕斌等.网络安全技术[M].北京:清华大学出版社,2004.8。致谢本文是在陈俊老师的热情关心和指导下完成的,他渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!在论文完成过程中,本人还得到了其他老师和许多同学的热心帮助,本人向他们表示深深的谢意!最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!作者简介姓名:王文丰性别:男出生年月:1984年4月E-mail:zkyo1984@PAGE第1页共29页声明本论文的工作是2007年2月至2007年6月在成都信息工程学院网络工程系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。关于学位论文使用权和研究成果知识产权的说明:本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:(1)学校有权保管并向有关部门递交学位论文的原件与复印件。(2)学校可以采用影印、缩印或其他复制方式保存学位论文。(3)学校可以学术交流为目的复制、赠送和交换学位论文。(4)学校可允许学位论文被查阅或借阅。(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程学院。特此声明!毕业设计(论文)基于Misty1算法的加密软件(Java)的实现论文作者姓名:申请学位专业:申请学位类别:论文提交日期:基于Misty1算法的加密软件(Java)的实现摘要随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。本文用JAVA语言开发了一个基于Misty1算法的加密软件,该软件能对文件进行加密和解密。在具体实现时,首先分析了Misty1算法的基本结构,设计出相应的实施方法,正确实现了该算法,其次,设计了一个图形用户界面,最后对软件进行了测试,验证了实现方法的正确性。关键词:Misty1;Java;加密;解密
TheImplementationofEncryptionSoftware(Java)BasedonMisty1AlgorithmAbstractWiththerapiddevelopmentofcomputernetworkstechnologyandcommunicationtechnology,Informationsecurityhasbecomeoneofthemostimportantproblemsurgenttoresolveininformationsociety,Cryptographictechnologyisthecoretechnologytoguaranteeinformationsecurity.Inthispaper,thesoftwareofencryptionbasedonMisty1algorithmisdevelopedbyusingJAVAlanguage.Itcanencryptanddecryptafile.Duringtheprocessofimplementation,thebasicstructureofthealgorithmisanalyzedfirstandthecounterpartmethodisdesigned,secondly,aGUIisdesigned,finally,thesoftwareistested,theresultshowsthatmethodofimplementationisright.Keywords:Misty1;Java;Encryption;Decrypt目录论文总页数:24页1 引言 11.1 课题背景 11.2 国内外研究现状 11.3 本课题研究的意义 21.4 本课题的研究方法 32 Misty1算法描述 32.1 秘钥产生部分 32.2 数据随机化部分 42.3 函数描述 42.3.1 FI函数 42.3.2 FO函数 52.3.3 FL函数 72.3.4 FL-1函数 83 Misty1加密软件的设计与实现 93.1 工作环境介绍 93.2 Java及程序编辑工具介绍 93.2.1 Java介绍 93.2.2 程序编辑工具介绍 103.3 Misty1算法应用于文件加密的分析 123.4 Misty1算法的实现 133.4.1 加密 133.4.2 解密 153.5 设计流程图、图形界面及事件处理 183.5.1 加密/解密流程图 183.5.2 图形界面 183.5.3 处理按钮事件 204 程序演示 214.1 程序演示 214.2 结果及存在的问题 21结论 22参考文献 22致谢 23声明 24第25页共24页引言课题背景现代密码学是一门迅速发展的应用科学。随着因特网的迅速普及,人们依靠它传送大量的信息,但是这些信息在网络上的传输都是公开的。因此,对于关系到个人利益的信息必须经过加密之后才可以在网上传送,这将离不开现代密码技术。Misty1算法是在1996年公布的,它是一个分组密码算法,密钥长度是128位,明文长度是64位。它是由在三菱工作的EisakuTakeda提交给NESSIE。MISTY1可以在资源紧张的环境下实现。整个算法是由递归等组成,每一个层次的结构又一稳妥的Feistel结构。MISTY1是一迭代密码可以迭代超过8轮,或者更普遍,迭代4回。它用128位密钥对64位数据进行不确定轮回的加密。它采用了两个S-盒,一个7×7S-盒,s7,一个9×9S-盒,s9。它取得了良好的良好的阻力线和鉴别攻击,而且还使能实行以相对较少的逻辑组件中执行函数的程度相对较低。国内外研究现状随着我国对计算机的普及,计算机和通信技术已经在我国得到了广泛发展及应用,从而使我们对信息的安全存储、安全处理和安全传输的需要越来越迫切。特别在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候选算法公布以后,国内外许多专家学者都致力于候选算法的安全分析,预计将会推出一些新的攻击方法,这无疑将进一步推动分组密码的发展。本课题研究的意义标准化是工业社会的一个基本概念,它意味着生产规模化、降低成本、方便维修和更换为了实现非相关团体之间的保密通信,加密体制的标准化是必要的。分组密码由于其固有特点,已经成为标准化进程的首选体制。信息安全的最大特点之一是自主性,因而其核心技术——密码学的研究与开发应当是一种本土性的科学。对于有些产品,可以通过外方引进来解决由于技术落后而带来的问题。然而对于安全产品,除非能完全确信它在硬件和软件上没有陷门,否则,贸然使用可能带来不可预测的后果。而要做到软硬件上的确认通常是十分困难的。因此,最明智的方法是依靠自己的力量并汲取现有的先进经验进行研究、设计和开发。为了维护通信安全、打击犯罪,1993年4月,美国政府宣布了一项新的建议,该建议倡导联邦政府和工业界使用新的具有密钥托管功能的联邦加密标准。该建议称为托管加密标准(escrowedencrytionstandard,EES),又称C1ipper建议。其目的是为用户提供更好的安全通信方式,同时允许政府机构在必要情况下进行监听。EES系统中嵌入了分组加密算法Sk-ipjack,尽管目前对该系统和算法有许多争议,但从维护国家通信安全的角度,这项建议是有积极意义的。在区域通信系统中,用户较多,他们的地位、作用都不相同,所流通的信息的重要性也不可能完全相同,因此他们要求得到的安全保护等级也不应该相同。由此可见,研究多安全级密码算法非常必要。迭代分组密码(所谓选代分组密码就是以迭代一个简单的轮函数为基础的密码,即通过选择某个较简单的密码变换,在密钥控制下以迭代方式多次利用它进行加密变换,例如Feistel型密码就是一种选代密码,是分组密码的典型代表,其数学思想简单而灵巧。特别是在相同的轮函数之下,迭代次数的不同即代表了安全强度的不同级别。在Internet/Intranet中随着通信量和业务种类的增加,对安全认证和保密业务的需求日益迫切。比如,PGP(PrettyGoodPrivacy)就是一种广泛应用于Internet中E-mail系统的一种安全技术方案,它也可以用于其他网络中。PGP的安全业务包括机密性、认证性、不可抵赖性等,其中的机密性就是利用分组密码算法IDEA来保证的。另外,分组密码的工作模式可提供一些人们所需要的其他密码技术,比如流密码技术和杂凑技术等。本课题的研究方法研究相关资料,理解Misty1算法的原理,并参考学习使用其他编程语言编写的基于此算法的加密软件的代码。深入学习Java编程语言,熟悉其编写程序的流程。然后尝试用Java来实现Misty1算法,能对数据进行加密和解密。对程序进行测试,对测试结果进行分析研究,进而对程序进行改进,对关键算法代码进行尽可能的优化,最终得到一个在windows运行的可以用指定密钥对文件进行MISTY1加密并可解密的完整应用程序。Misty1算法描述MISTY1算法是用128位密钥对64位数据进行不确定轮回的加密。它在设计时就采用了经证实可以抵抗密码微分分析和线形分析的安全理论,而且它实现了在硬件环境和软件环境下都比较高的加密速度。算法可以分为两部分,一部分是密钥的产生部分,另一部分是数据随机化部分。密钥产生部分根据128位的输入密钥,产生128位的扩展密钥。数据随机化部分输入64位的数据进行混合,也就是所谓的加密。秘钥产生部分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‖K8fori=1to8doK,i=FI(Ki,Ki+1)K,=K,1‖K,2‖K,3‖K,4‖K,5‖K,6‖K,7‖K,8数据随机化部分数据随机化部分使用了两种函数,FO和FL,函数FO调用函数FI。密钥扩展部分也使用函数FI。FI函数使用两个S盒,S7和S9。函数描述FI函数FI函数将16位输入分为两部分L0和R0(图2-2)图2-2FI函数FI的输入为:X16=L0‖R0KIij=KIijL‖KIijRFI则定义为:R1=S9[L0]∧(00b‖R0)L1=R0R2=S7[L1]∧(truncate(R1))KIijLR3=S9[L2]∧(00b‖R2)L3=R2Y16=L3‖R3FI函数程序代码: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;}FO函数FO函数将32位的输入X32分为两个16位的L0和R0(图2-3)图2-3FO函数FO的输入为:X32=L0‖R0KOi=KOi1‖KOi2‖KOi3‖KOi4KIi=KIi1‖KIi2‖KIi3FO的功能能表现为:fori=1to3do:Rj=FI(Lj-1∧KOij,KIij)∧Rj-1Lj=Rj-1Y32=(L3∧KOi4)R3FO函数程序代码:publiclongFO(longx,inty,intz)//FO函数{inti;intKOS[]=newint[4];intKIS[]=newint[3];System.arraycopy(KO,y,KOS,0,KOS.length);System.arraycopy(KI,z,KIS,0,KIS.length);intL1,L2,L3,R1,R2,R3; R1=FI((KO[0]^((int)(x>>16)&0xFFFF)),KI[0])^((int)(x&0xFFFF));L1=(int)(x&0xFFFF);R2=FI((L1^KO[1]),KI[1])^R1; L2=R1;R3=FI((L2^KO[2]),KI[2])^R2;L3=R2^KO[3];return(((long)L3)<<16)|((long)R3);}FL函数函数FL用于加密。它采用32位的输入数据X32,将X32分为两个16位即XL和XR。另外一个是扩展密钥的下标KEY,返回一个32位的数据Y32(图2-4)图2-4FL函数FL的输入为:X32=XL‖XRKLi=KLiL‖KLIrFL的功能为:YR=(XL&KLiL)∧XRYL=(YR|KLIr)∧XL则输出:Y32=YL‖YRFL函数程序代码:publiclongFL(longx,longkey)//FL函数{ longXL,XR,KL,KR,YL,YR; XL=x>>16;XR=x&0x0000FFFF; KL=key>>16;KR=key&0x0000FFFF;YR=(XL&KL)^XR;YL=(YR|KR)^XL;return(YL<<16)|YR;}FL-1函数FL-1函数是逆向的FL函数,用于解密。它将32位的输入Y32分为两个16位的YL和YR,与KLi进行计算,返回一个X32(图2-5)图2-5FL-1函数FL-1输入为:Y32=YL‖YRKLi=KLiL‖KLIrFL-1的功能:XL=(YR|KLIr)∧YLXR=(XL&KLiL)∧YR则输出:X32=XL‖XRFL-1函数程序代码:publiclongFLINV(longy,longkey)//FLINV函数,FL函数的逆{ longXL,XR,KL,KR,YL,YR;YL=y>>16;YR=y&0x0000FFFF;KL=key>>16;KR=key&0x0000FFFF;XL=(YR|KR)^YL;XR=(XL&KL)^YR;return(XL<<16)|XR;}Misty1加密软件的设计与实现工作环境介绍本设计使用的编程语言为Java,使用Java2PlatformStandardEdition5.0。操作系统为WindowsXP,CPU为AMPXP2500+,内存256M。Java及程序编辑工具介绍Java介绍Java是1995年5月23日由Sun公司引进到我们这个世界的革命性编程语言,它被美国的著名杂志《PCMagazine》评为1995年是大优秀科技作品。之所以称Java为革命性编程语言,是因为传统的软件往往与具体的实现环境有关,一旦环境有所变化就需要对软件做一番改动,耗时耗力,而Java编写的软件能在执行码上兼容。这样,只要计算机提供了Java解释器,用Java编写的软件就能在其上运行。Java的优点主要有以下几点:(1)Writeonce,runanywhere这句话一直是Java程序员的精神指南,也是Java之所以能够受到程序设计师们喜爱的原因之一,最大原因就是JVM技术。(2)简单纯面向对象的特性,再加上众多类库的支持,使用Java开发各式各样的应用程序,可以说是易如反掌。除此之外,无论在调试或是程序修改、增加新功能方面,因为对象的特性,使得这些维护也变得非常容易。(3)安全性Java的很多功能都是针对安全性的问题考虑的,Java甚至可以对于不同的安全需求而Java应用程序的安全等级。原则上一个未经您允许的Java程序,是不可能伤及你的系统的。(4)UnicodeJava使用Unicode作为他的标准字符,这项特性使得Java的程序在不同语言的平台上都能编写和执行。Java也是目前所有电脑语言中,唯一天生使用Unicode的语言。(5)网络Java可以说是借助互联网而重声的,自然对于具备网络功能程序的编写,也是非常容易的。不论是一般互联网的程序Socket、Email,还是服务器网页的程序Servlets、JSP,甚至分布式网络程序CORBA等的相关套件支持,可以说是非常丰富,使用起来也是非常容易。(6)资源回收处理资源回收处理是由JVM协助我们的程序对内存做动态的管理,你的程序需要多少内存、那些对象的内存已经不使用了,需要归还给系统,这些烦琐且危险的工作全部交由JVM去帮我们管理,让我们能够更专心的写程序,不需要担心内存的问题,而内存的统一管理,对于跨平台也用相当的帮助。(7)异常处理为了使Java程序更安全、更稳定,那么程序随机应变的能力就必须好。Java引入了异常处理机制,能够在程序中比较可能有异常情况发生的地方,加上相对应的处理,让程序不至于因为突发的错误,造成执行中断或是当机的情况。异常处理也让用户更恩能够控制整个程序执行的流程,也使得程序的设计更加严谨。目前Java的主要应用在于电子商务及企业电子化部分。除此之外,Java也渐渐地在消费性电子平台上发挥它跨平台的特性,各手机厂商、PDA厂商也纷纷地发表内置JVM的系统,Java在这方面跟其他程序语言比起来,可以说是如鱼得水。未来,除了SUN公司更加强J2EE、J2SE和J2ME中的功能外,Java还会更进一步的结合XML,把现在外挂的XML套件包含进Java标准套件中,那么对于跨平台来说将更是如虎添翼。Java的未来可以说是一片光明。程序编辑工具介绍UltraEdit是很多人爱用的文本编辑软件,它除了单纯的文本编辑外,对于一些特殊的文件,例如Java、ASP等等,都会辨别出它们的关键字或是字符串、数字等,然后用不同的颜色表示它们,让你更容易看出程序中有些什么,或是有没有什么关键字输入错了。除此之外它也可以简单地帮你做错字的更正。不过它最强的地方在于能设定一些宏(Macro),让你可以自行设计额外的特殊功能。图3-1程序编辑工具UltraEditUltraEdit有一项执行外部指令的功能,还可以把执行结果显示出来。好处是可以把DOS模式的结果显示在一个新的文件里,这样一来再多的信息也不怕遗漏了。使用方法很简单,就到菜单栏上选择“高级”→“DOS命令”,快捷键是“F9”。在“命令”处输入在DOS模式下要输入的编译指令,在“工作目录”处选择程图3-2好用的功能图3-3DOS命令执行后界面Misty1算法应用于文件加密的分析Misty1是对称密钥加密,也是分组密码。分组密码是将明文划分为固定度的数据组,然后以组为单位进行加密,分组密码优点是不需同步。实质是,设计一种算法,能在密钥控制下,把n比特明文简单而又迅速地置换成唯一n比特密文,并且这种变换是可逆的(解密)。设计思想:“扩散”将明文及密钥的影响尽可能迅速地散布到较多个输出的密文中(将明文冗余度分散到密文中)。产生扩散的最简单方法是通过“置换”(比如:重新排列字符)。“混淆”其目的在于使作用于明文的密钥和密文之间的关系复杂化,是明文和密文之间、密文和密钥之间的统计相关特性极小化,从而使统计分析攻击不能奏效。通常的方法是“代换(Substitution)”(比如恺撒密码)。分组密码设计的要求:1、分组长度足够大(64~128比特);2、密钥量要足够大(64~128);3、算法足够复杂(包括子密钥产生算法)4、加密、解密算法简单,易软、硬件实现5、便于分析(破译是困难的,但算法却简洁清晰)。所以把M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年集团“安全生产月”测试题附答案
- 2026年检验检测机构从业人员安全教育培训试题及答案
- 2026年临床执业医师资格考试模拟试题及答案(儿科学)
- 2026年煤矿培训考核试题库150道及参考答案【轻巧夺冠】
- 2026年农机驾驶证考试题及答案
- 2026年期货从业法律法规试题(附答案)
- 2026年人工智能通识认证考核试题含答案
- 2026年全科医学科主治医师病例分析试题及标准答案集
- 第五单元 习作与例文:生活万花筒 课件 2026-2027学年统编版语文四年级上册
- 《张量分析及其在力学中的应用》教案全套 -程国强
- 新时代陕西省立德树人工作指南细则
- 再生障碍性贫血诊断与治疗中国指南
- 精神病人警情处置规范与实战
- 早读知识点(课件)-2025-2026学年二年级上册数学人教版
- 办公楼公区装修木工报价清单
- 惊恐障碍的认知行为干预与药物协同
- 声东击西课件
- 2025年服务机器人应用技术员职业技能竞赛题库(含答案)
- JCT 2966-2025混凝土用生活垃圾焚烧飞灰-知识培训
- 《拒绝不文明语言》主题班会课件
- 五年级数学小数乘法教学案例分享
评论
0/150
提交评论