SHA-1实验报告
一、实验题目
SHA-加密算法
二、实验目的和要求
熟悉SHA-1算法的运行过程,使用C++语言编写实现SHA-1算法程序,增加对摘要函数的理解。
理解 SHA-1 轮函数的定义和工作过程。实现 SHA-1 哈希算法。分析 SHA-1 算法运行性能。
三、实验环境
clion
四、实验内容
给定的 SHA-1 对单个 512 分组处理结构如图,程序完成功能:
五、算法描述及实验步骤
(1) 消息填充:消息转化为位字符串;字符串补位;附加消息长度。
(2) 初始化缓存:5 个 32 位的缓存字,大端填充。 (3) 设置必要操作和函数:循环左移位,轮常量K𝑡,轮逻辑函数(每 20 步 更新一个) (4) 16 个消息字扩展为 80 个字 (5) 80 步迭代:消息字,左移循环,逻辑函数,轮常量,更新缓存字。 𝐴, 𝐵, 𝐶,𝐷, 𝐸 ← (𝐸 + 𝑓𝑡(𝐵, 𝐶,𝐷) + 𝐶L𝑆5(𝐴) + 𝑊𝑡 + 𝐾𝑡), 𝐴, 𝐶L𝑆30(𝐵), 𝐶,𝐷 (6) 而后再用缓存字初始值异或输出 160 位摘要。
六、调试过程及结果(附截图)
✨LPTSTR 替换为 char*
✨输出结果
七、总结体会
❓代码如何实现消息初始填充的过程?
消息填充:消息转化为位字符串;输入是按 512 位(16个字)的分组进行处理的。字符串补位;附加消息长度。
补位 原始消息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)%512 = 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。 补位是这样进行的:先补一个1,然后再补0 ,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。 补长度 就是将原始数据的长度补到已经进行了补位操作的消息后面。通常用两个字(64位)来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。