密码实验md5.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档