- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验报告hash.docx
实验报告
实验一
哈希函数的实现
实验一 HASH函数的实现
1 实验要求
利用c语言实现MD5、SHA-1,能够对任意长的消息值进行压缩至定长。在实现的同时需要保持效率,这是好的压缩函数所必须具备的,所以我们在程序最后迭代压缩一万次,并记录使用时间.
2 算法流程介绍
1).MD5
步骤1:填充报文,填充报文的目的是使报文长度与448模512同余(即长度=448 mod 512)。若报文本身已经满足上述长度要求,仍然需要进行填充,因此填充位数在1-512之间。填充方法是在报文后附加一个1和若干个0,然后附上表示填充前报文长度的64位数据(最低有效位在前)。若填充前报文长度大于2^44,则只取其低位64位。
步骤2:初始化缓冲区。Md5函数的中间结果和最终结果保存在128位的缓冲区(A,B,C,D)中,其中A,B,C,D均为32位,其初始值分别为下列整数(十六进制):
AB:EFCDAB89
C:98BADCFE
D这些初始值存储方式为小端存储,即最低有效位存储在低字节位置。
步骤3:执行算法主循环。每次循环处理一个512位的分组,故循环次数为填充后报文的分组数。
算法核心是压缩函数,它由四轮算法组成,四轮运算结构相同。每轮的输入是当前要处理的512位的分组和128位缓冲区的ABCD的内容。每轮所使用的逻辑函数分别为F,G,H和I。第四轮的输出与第一轮的输入相加得到压缩函数的输出。
步骤4:输出。所有的512分组处理完之后,最后一个分组的输出即是128位的报文摘要。
关于每轮对512位分组的处理过程如下,需要对缓冲区ABCD进行16步的迭代,因此压缩函数共有64步,每步的迭代形式为
A,B,C,D←D,B+((A+g(B,C,D)+X[k]+T[i])S,B,C)
其中A,B,C,D为缓冲区的四个字,g为基本逻辑函数F,G,H,I之一,s表示32位的变量循环左移S位,X[k]=M[q*16+k]即报文的第q个分组的第k个32字,T[i]表示矩阵T中的第i个32位字;+为模2^32加。
四个轮函数F,G,H和I,其输入均为三个32位的字,输出为32位的字,执行位逻辑运算,其定义为:
每轮使用T[1,…,64]中的16个元素,T通过正弦函数构造,具体值不再赘述,另外对于待处理的512分组,16个字的消息块,在每轮中的使用顺序有规定,具体为,第一轮为初始顺序呢,第二轮至第四轮由如下置换确定:
2).SHA-1
因为同为MD结构的哈希函数,这里关于SHA-1的算法介绍相对简化一些,重点提出和md5不同的地方。
步骤1:仍是报文填充,块长类同MD5,需要注意的是SHA-1使用的是大端存储,和MD5正好相反,具体处理见后面的程序实现。
步骤2:初始化缓冲区,这里需要注意,SHA-1多了一个32位寄存器,也就是最终结果为160位,寄存器初始值前四个与MD5一样,新增一个E=C3D2E1F0。
步骤3:执行算法主循环,类同MD5,每次处理512位分组,80步,分四轮,每轮20步,单步的细节如下,
与MD5不同的是消息字的扩展,过程为
其他的参量不再赘述,详见下面的算法实现。
3实现细节与心得
我编写了一个digest的工程,集成了MD5和SHA-1,下面介绍我的实验细节,我以MD5的实现介绍为主,然后补充介绍SHA-1特别的部分。
1)头文件“cryptoConfig.h”:
该文件中主要是包括对unsigned int和unsigned char的重新定义,另外以宏定义的方式定义了对于一个字的循环左移、循环右移、左移和右移。
2)头文件“digest.h”:
定义本程序所要使用的数据结构和声明主要函数,具体的定义了一个名为MD5_CTX的结构体变量,结构体成员包括了四个寄存器的字,64位的消息长度,512位的单轮消息块,和新变量“curlen”,用来标记还没压缩的消息长度,后面实现时会发现,有这样一个变量,在进行动态内存分配时显得非常方便,我们的目的就是不多使用一丁点的内存。
主要的功能函数包括
int MD5_Init(MD5_CTX *ctx):对512位的带压缩消息块进行初始化;
int MD5_Update(MD5_CTX *ctx, const unsigned char *data, size_t len):对进来的数据进行填充,当buffer空间满了之后实现压缩,循环进行压缩,只留最后一块;
int MD5_Final(unsigned char *md, MD5_CTX *ctx):对最后一块或者两块进行填充,并将最后的寄存器字级联之后赋给指针md。
SHA-1的结构体变量SHA-1_CTX和三个功能函数的声明也在这个头文件
您可能关注的文档
- 基因的本质基因的表达.doc
- 基因的结构复习高中三年级生物课件.ppt
- 基因的结构高中三年级生物课件.ppt
- 基因的自由组合定律高中三年级生物课件.ppt
- 基因的表达复习高中三年级生物课件.ppt
- 基底外侧杏仁核内一氧化氮对大鼠睡眠及行为活动的影响.pdf
- 基础会计分录大全练习题.doc
- 基础会计教学大纲.doc
- 基础会计理论实践一体化教学探讨.doc
- 基础教育阶段英语课程的任务是激发和培养学生学习英语.ppt
- 浙江衢州市卫生健康委员会衢州市直公立医院高层次紧缺人才招聘11人笔试模拟试题参考答案详解.docx
- 浙江温州泰顺县退役军人事务局招聘编外工作人员笔试备考题库及参考答案详解一套.docx
- 江苏靖江市数据局公开招聘编外工作人员笔试模拟试题及参考答案详解.docx
- 广东茂名市公安局电白分局招聘警务辅助人员40人笔试模拟试题带答案详解.docx
- 江苏盐城市大丰区住房和城乡建设局招聘劳务派遣工作人员4人笔试模拟试题带答案详解.docx
- 浙江舟山岱山县东沙镇人民政府招聘笔试模拟试题及参考答案详解1套.docx
- 最高人民检察院直属事业单位2025年度公开招聘工作人员笔试模拟试题含答案详解.docx
- 浙江金华市委宣传部、中共金华市委网信办所属事业单位选调工作人员笔试备考题库及答案详解1套.docx
- 广东深圳市党建组织员招聘40人笔试模拟试题及答案详解1套.docx
- 江苏南京水利科学研究院招聘非在编工作人员4人笔试模拟试题及参考答案详解.docx
最近下载
- 《中国结核病预防控制工作技术规范(2020年版)》.PDF VIP
- 2023年北京市中考英语真题(含答案) .pdf VIP
- 南通大学2023-2024学年《病理学》期末考试试卷(A卷)附参考答案.docx
- 胸部损伤-教学课件.ppt VIP
- 某银行数据中心搬迁整体实施方案.pdf VIP
- 麦肯锡中国银行业CEO季刊(2020年秋)-麦肯锡-224页正式版.pdf VIP
- 国家公务员录用考试体检标准.doc VIP
- 入党申请书时事政治精选五篇.docx VIP
- 农村公路安全生命防护工程监理规划49943.doc VIP
- 高中英语3500词【打印版】乱序版3500词汇(带音标120页).pdf VIP
文档评论(0)