- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
密码实验md5
实验一MD5哈希算法报告
1 实验目的
(1)理解MD5算法的基本思想。
(2)实现MD5算法。
(3)通过该算法加深对HASH算法的理解。
2 实验内容
基于Visual C++,编程实现各类消息的摘要值。要求:输入任意字符串,以16进制形式输出其MD5值。
实验原理
MD5是由国际著名密码学家、“图灵奖”获得者兼公钥加密算法RSA的创始人、麻省理工大学的RonaldRivest教授于1991年设计的。它与SHA共同构成两大哈希算法,广泛应用于金融、证券等电子商务领域。MD5输入是任意长的消息,分组长度为512比特,输出128比特。MD5算法框图如下:
由图中可看出,MD5是四轮运算,每轮又要进行16步迭代运算,4轮共需64步完成。其中T[1,…,64]为64个常数,参与不同轮的计算。X[k]=M[q×16+k],即消息第q个分组中的第k个32比特字(k=1,…,16)。F、G、H和I为各轮逻辑函数,定义如下:
4轮处理过程中,每轮以不同的次序使用16个字。在第1轮以字的初始次序使用,第2轮到第4轮分别对字的次序i做置换后得到一个新次序,然后以新次序使用16个字。3个置换分别为ρ2(i)=(1+5i) mod 16,ρ3(i)=(5+3i) mod 16和ρ4(i)=7i mod 16。
每轮的每步变换为a=b+CLSs(a+g(b,c,d)+X[k]+T[i),其中g为逻辑函数,CLSs为循环左移s位,X[k]为分组的第k个32bit字,T[i]为常数表中第i个32-bit字,+为模232加法。特别当g=F,该变换记为FF(a, b, c, d, xj, s, ti)。1轮中的16步变化按照一定的次序进行,4轮进行64步。
每轮输出、中间结果和最终Hash值存储在缓冲区a、b、c和d。缓冲区初始化以十六进制表示为ab=89ABCDEF,c=FEDCBA98,d
对原始的消息首先进行分组,各分组以级联的方式进行上述变换,所谓级联即前一分组的结果(A,B,C,D)作为后一分组的输入(A,B,C,D)。
由于分组长度为512比特,当输入消息的比特长度不是512比特的整数倍,显然首先要进行分组填充。填充比特的第1位为1,并预留64比特,剩下的各位皆为0。预留的64比特以little-endian方式填充原始消息的比特长度。
4 算法描述
MD5类的主要的数据类型为unsigned UInt32(__int32)和UInt64(__int64)。成员变量有static UInt32 A,B,C,D(4个寄存器);static int S11,S12,S13,S14,S21,S22,S23,S24,S31,S32,S33,S34,S41,S42,S43,S44(4轮中的循环移位量);
主要成员函数如下:
(1) void Append(byte *input,int len1,UInt32 *block,int len2)
说明:将输入的字节流扩充到64字节的整数倍。
参数:input,输入的字节流;Len1,input的长度;Block,扩展后32比特的数组;len2,Block的长度。
(2) void ProcessBlock(UInt32 *x,int len,UInt32 *bits)
说明:将所有的32比特的分组变换成128比特。
参数:x,输入的32比特的分组;Len,x的长度;bits,经过hash变化后的128比特,即4个32比特的量。
(3)void MD5Array(byte *input,int len,byte *output)
说明:实现MD5摘要。
参数:input,输入的字节流,len,input数组长度;output,输出字节流。
(4)static UInt32 F(UInt32 x, UInt32 y, UInt32 z)
说明:F的MD5基本的按位操作函数,G、H和I可类似得到。
参数:x、y和z为3个寄存器值,F运算结果返回。
(5)static UInt32 FF(UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
说明:FF用于第一轮变换的函数, 其他轮变换的函数GG、HH和II类似得到。如函数FF(a, b, c, d, mj, s, ti)为a=b+((a+F(B,C,D)+X[j]+T[i])S)。
参数:abcd为4个寄存器,mj为消息中的第j个32比特分量,s为循环移位个数,ti来自于常数表。
实验步骤
在提示输出Please input the string to hash后
输入学号+姓名angqian,计算其MD5值。
6
您可能关注的文档
最近下载
- 危重症患者护理文书书写规范PPT参考课件.ppt VIP
- 2025版新教材高中语文第一单元第2课立在地球边上放号红烛峨日朵雪峰之侧致云雀教案新人教版必修上册.docx VIP
- 经史子集国学文库:集部·小说·唐钟馗全传.pdf
- 采购部年度总结及次年工作计划 .ppt VIP
- AI大模型在军事领域中的应用与军事智能化.pptx VIP
- 现场应急处置卡(34类常见事故).doc VIP
- 容积粘度吞咽测试(VVST)吞咽障碍的临床检测方法课件.ppt VIP
- CLSI-EP09-A3-2013中文翻译文档.pdf VIP
- 中医食疗学教案--------(06年春).doc VIP
- 图形显示装置使用说明书-北大青鸟.pdf VIP
文档评论(0)