现代密码学实验报告.docx
- 文档编号:26775424
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:27
- 大小:32.39KB
现代密码学实验报告.docx
《现代密码学实验报告.docx》由会员分享,可在线阅读,更多相关《现代密码学实验报告.docx(27页珍藏版)》请在冰豆网上搜索。
现代密码学实验报告
学生姓名
学号
专业班级
指导教师
学院信息科学与工程学院
完成时间2014年5月
实验一对称密码算法实验
[实验目的]
1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。
2.掌握DES、AES、RC4的算法流程和实现方法。
[实验预备]
1.DES算法有什么特点算法中的哪些结构保证了其混淆和扩散的特性
答:
分组比较短、密钥太短、密码生命周期短、运算速度较慢。
采用替代和置换的方法简单有效地遵循了香农定理,替代操作通过S盒达到了混淆效果,置换操作通过P盒扩散效果。
2.AES算法的基本原理和特点。
答:
AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。
AES加密有很多轮的重复和变换。
大致步骤如下:
1、密钥扩展(KeyExpansion),2、初始轮(InitialRound),3、重复轮(Rounds),每一轮又包括:
SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(FinalRound),最终轮没有MixColumns。
3.流密码RC4的密钥流生成以及S盒初始化过程。
答:
RC4由伪随机数生成器和异或运算组成。
RC4的密钥长度可变,范围是[1,255]。
RC4一个字节一个字节地加解密。
给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。
S盒用来加密数据,而且在加密过程中S盒会变化。
初始化长度为256的S盒。
第一个for循环将0到255的互不重复的元素装入S盒。
第二个for循环根据密钥打乱S盒。
下面i,j是两个指针。
每收到一个字节,就进行while循环。
通过一定的算法((a),(b))定位S盒中的一个元素,并与输入字节异或,得到k。
循环中还改变了S盒((c))。
如果输入的是明文,输出的就是密文;如果输入的是密文,输出的就是明文。
[实验内容]
1.分析DES、AES、RC4、SHA的实现过程。
2.用程序设计语言将算法过程编程实现。
3.完成字符串数据的加密运算和解密运算
输入明文:
Idolikethisbook
输入密钥:
cryption
[实验步骤]
1.预习DES、AES、RC4算法。
2.写出算法流程,用程序设计语言将算法过程编程实现。
DES算法流程:
代码:
#include""
#include""
#include
#include
#include<>
usingnamespacestd;
enum{encrypt,decrypt};
入指定的明文、密钥进行实验,验证结果。
DES运行截图:
AES
文件:
目录:
运行截图:
RC4运行截图:
4.自己选择不同的输入,记录输出结果。
DES:
AES:
RC4:
写出所编写程序的流程图和运行界面、运行结果。
[问题讨论]
1.在DES算法中有哪些是弱密钥哪些是半弱密钥
答:
弱密钥(十六进制编码):
001
FEFEFEFEFEFEFEFE
1F1F1F1F0F0F0E0E
E0E0E0E0F1F1F1F1
半弱密钥:
E01FE01FE01FE01F
FE01FE01FE01FE01
E001E001F101F101
FE1FFE1FFE01FE01。
2.改变明文或密钥中的一个比特值可能影响AES值中的多少比特
答:
两个以上的比特。
3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。
答:
DES是分组密码,所以在完成一个一轮的8组加密后,要达到加密可变长度的明文时,必须很好的将算法循环成为一个完美的整体。
但这个过程必须选择好输入与输出的方法和存储结构,比如使用string作为存储明文和密文的输出时,要注意到这种引用型的变量在存储时是属于同一片连续存储空间,所以一旦输出则会全部输出。
所以必须每一次循环后赋空值达到释放空间的效果,然后用循环控制输出,用函数截取位数,达到控制效果。
AES算法在实现时要注意一个特别重要的地方,因为是给文件加密,所以必须将准备好的txt格式的记事本中放入要加密的明文,然后该文件必须放置在当前程序运行的目录之下,否则将无法加密。
RC4算法较为简单只需注意各处循环的参数指针即可,循环的嵌套以及输入输出与算法的结合,出错后,调整了相关的i,j值及循环位置即完成了。
回答问题
实验二公钥密码算法实验
[实验目的]
1.掌握密码学中常用的公钥密码算法RSA、ECC的算法原理。
2.掌握RSA、ECC的算法流程和实现方法。
[实验预备]
和ECC密码系统所基于的数学难题是什么
和ECC算法的基本原理。
3.公钥密码系统可以取代对称密码系统吗
和ECC的实现过程。
[实验内容]
1.分析RSA、ECC的实现过程。
2.用程序设计语言将算法过程编程实现
3.完成数据的加密运算和解密运算
输入明文:
security
输入密钥:
cryption
对ASCII码进行加密和解密。
[实验步骤]
1.预习RSA、ECC算法。
2.了解大素数的生成、大数的运算、公钥、私钥的生成。
3.写出算法流程,用程序设计语言将算法过程编程实现。
RSA算法流程:
代码:
#include
#include
usingnamespacestd;
intCheckPrime()
{
intn;
doublek;
cin>>n;
k=sqrt(n);
inti;
if(n>=2&&n<=10000)
{
for(i=2;i<=k;i++)
{
if(n%i==0)
return0;
}
if(i>k)
returnn;
}
else
cout<<"输入的数字不符合要求,请重新输入!
"< return0; } intCreatePassword(inte,intp,intq,intm){ intd=1; intn; intou;握身份认证协议的原理和基本思想。 2.掌握SKEY协议的机制和实现方法。 [实验预备] 协议的作用。 协议的安全性分析。 协议的实现过程。 [实验内容] 1.分析SKEY协议的实现过程。 2.用程序设计语言将算法过程编程实现。 3.演示SKEY协议的身份鉴别过程。 [实验步骤] 1.预习SKEY协议的机制。 2.选择和实现相应的摘要算法MD5或SHA。 选择了MD5算法,代码如下: <>文件: ThefollowingmakesPROTOTYPESdefaultto0ifithasnotalready beendefinedwithCcompilerflags. */ #ifndefPROTOTYPES #definePROTOTYPES1 #endif /*POINTERdefinesagenericpointertype*/ typedefunsignedchar*POINTER; /*UINT2definesatwobyteword*/ typedefunsignedshortintUINT2; /*UINT4definesafourbyteword*/ typedefunsignedlongintUINT4; /*PROTO_LISTisdefineddependingonhowPROTOTYPESisdefinedabove. IfusingPROTOTYPES,thenPROTO_LISTreturnsthelist,otherwiseit returnsanemptylist. */ #ifPROTOTYPES #definePROTO_LIST(list)list #else #definePROTO_LIST(list)() #endif #endif <>文件: /*-headerfilefor */ Created1991.All rightsreserved. Licensetocopyandusethissoftwareisgrantedprovidedthatit isidentifiedasthe"RSADataSecurity,Inc.MD5Message-Digest Algorithm"inallmaterialmentioningorreferencingthissoftware orthisfunction. Licenseisalsograntedtomakeandusederivativeworksprovided thatsuchworksareidentifiedas"derivedfromtheRSAData Security,Inc.MD5Message-DigestAlgorithm"inallmaterial mentioningorreferencingthederivedwork. RSADataSecurity,Inc.makesnorepresentationsconcerningeither themerchantabilityofthissoftwareorthesuitabilityofthis softwareforanyparticularpurpose.Itisprovided"asis" withoutexpressorimpliedwarrantyofanykind. Thesenoticesmustberetainedinanycopiesofanypartofthis documentationand/orsoftware. */ /*MD5context.*/ #ifndef_MD5CONTEXT_H #define_MD5CONTEXT_H #include"" typedefstruct{ UINT4state[4];/*state(ABCD)*/ UINT4count[2];/*numberofbits,modulo2^64(lsbfirst)*/ unsignedcharbuffer[64];/*inputbuffer*/ }MD5_CTX; #ifdef__cplusplusMD5message-digestalgorithm */ /*Copyright(C)1991-2,RSADataSecurity,Inc.Created1991.All rightsreserved. Licensetocopyandusethissoftwareisgrantedprovidedthatit isidentifiedasthe"RSADataSecurity,Inc.MD5Message-Digest Algorithm"inallmaterialmentioningorreferencingthissoftware orthisfunction. Licenseisalsograntedtomakeandusederivativeworksprovided thatsuchworksareidentifiedas"derivedfromtheRSAData Security,Inc.MD5Message-DigestAlgorithm"inallmaterial mentioningorreferencingthederivedwork. RSADataSecurity,Inc.makesnorepresentationsconcerningeither themerchantabilityofthissoftwareorthesuitabilityofthis softwareforanyparticularpurpose.Itisprovided"asis" withoutexpressorimpliedwarrantyofanykind. Thesenoticesmustberetainedinanycopiesofanypartofthis documentationand/orsoftware. */ #include"" #include"" /*ConstantsforMD5Transformroutine. */ #defineS117 #defineS1212 #defineS1317 #defineS1422 #defineS215 #defineS229 #defineS2314 #defineS2420 #defineS314 #defineS3211 #defineS3316 #defineS3423 #defineS416 #defineS4210 #defineS4315 #defineS4421 staticvoidMD5TransformPROTO_LIST((UINT4[4],unsignedchar[64])); staticvoidEncodePROTO_LIST ((unsignedchar*,UINT4*,unsignedint)); staticvoidDecodePROTO_LIST ((UINT4*,unsignedchar*,unsignedint)); staticvoidMD5_memcpyPROTO_LIST((POINTER,POINTER,unsignedint)); staticvoidMD5_memsetPROTO_LIST((POINTER,int,unsignedint)); staticunsignedcharPADDING[64]={ 0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; /*F,G,HandIarebasicMD5functions. */ #defineF(x,y,z)(((x)&(y))|((~x)&(z))) #defineG(x,y,z)(((x)&(z))|((y)&(~z))) #defineH(x,y,z)((x)^(y)^(z)) #defineI(x,y,z)((y)^((x)|(~z))) /*ROTATE_LEFTrotatesxleftnbits. */ #defineROTATE_LEFT(x,n)(((x)<<(n))|((x)>>(32-(n)))) /*FF,GG,HH,andIItransformationsforrounds1,2,3,and4. Rotationisseparatefromadditiontopreventrecomputation. */ #defineFF(a,b,c,d,x,s,ac){\ (a)+=F((b),(c),(d))+(x)+(UINT4)(ac);\ (a)=ROTATE_LEFT((a),(s));\ (a)+=(b);\ } #defineGG(a,b,c,d,x,s,ac){\ (a)+=G((b),(c),(d))+(x)+(UINT4)(ac);\ (a)=ROTATE_LEFT((a),(s));\ (a)+=(b);\ } #defineHH(a,b,c,d,x,s,ac){\ (a)+=H((b),(c),(d))+(x)+(UINT4)(ac);\ (a)=ROTATE_LEFT((a),(s));\ (a)+=(b);\ } #defineII(a,b,c,d,x,s,ac){\ (a)+=I((b),(c),(d))+(x)+(UINT4)(ac);\ (a)=ROTATE_LEFT((a),(s));\ (a)+=(b);\ } /*MD5initialization.BeginsanMD5operation,writinganewcontext. */ voidMD5Init(context) MD5_CTX*context;/*context*/ { context->count[0]=context->count[1]=0; /*Loadmagicinitializationconstants. */ context->state[0]=0x; context->state[1]=0xefcdab89; context->state[2]=0x98badcfe; context->state[3]=0x; } /*MD5blockupdateoperation.ContinuesanMD5message-digest operation,processinganothermessageblock,andupdatingthe context. */ voidMD5Update(context,input,inputLen) MD5_CTX*context;/*context*/ unsignedchar*input;/*inputblock*/ unsignedintinputLen;/*lengthofinputblock*/ { unsignedinti,index,partLen; /*Computenumberofbytesmod64*/ index=(unsignedint)((context->count[0]>>3)&0x3F); /*Updatenumberofbits*/ if((context->count[0]+=((UINT4)inputLen<<3)) <((UINT4)inputLen<<3)) context->count[1]++; context->count[1]+=((UINT4)inputLen>>29); partLen=64-index; /*Transformasmanytimesaspossible. */ if(inputLen>=partLen){ MD5_memcpy ((POINTER)&context->buffer[index],(POINTER)input,partLen); MD5Transform(context->state,context->buffer); for(i=partLen;i+63 MD5Transform(context->state,&input[i]); index=0; } else i=0; /*Bufferremaininginput*/ MD5_memcpy ((POINTER)&context->buffer[index],(POINTER)&input[i], inputLen-i); } /*MD5finalization.EndsanMD5message-digestoperation,writingthe themessagedigestandzeroizingthecontext. */ voidMD5Final(digest,context) unsignedchardigest[16];/*messagedigest*/ MD5_CTX*context;/*context*/ { unsignedcharbits[8]; unsignedintindex,padLen; /*Savenumberofbits*/ Encode(bits,context->count,8); /*Padoutto56mod64. */ index=(unsignedint)((context->count[0]>>3)&0x3f); padLen=(index<56)(56-index): (120-index); MD5Update(context,PADDING,padLen); /*Appendlength(beforepadding)*/ MD5Update(context,bits,8); /*Storestateindigest*/ Encode(digest,context->state,16); /*Zeroizesensitiveinformation. */ MD5_memset((POINTER)context,0,sizeof(*context)); } /*MD5basictransformation.Transformsstatebasedonblock. */ staticvoidMD5Transform(state,block) UINT4state[4]; unsignedcharblock[64]; { UI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代 密码学 实验 报告