快速入门数字芯片设计,UCSD ECE111(六)SHA256哈希算法的状态机实现(二)

简介: 快速入门数字芯片设计,UCSD ECE111(六)SHA256哈希算法的状态机实现(二)

步骤三:初始化缓冲区,将8个32比特的信息摘要分别进行初始化,初始数据如图所示。(8个32比特拼起来为256bit,这些数据会经过运算,最终的结果就是哈希值)

步骤4:对这些数据进行处理:

  • 将数据M分为512bit的block,M0,M1,...,Mj ,....
  • 对Mj连续的进行处理,一个接一个的处理
  • 输入有,��:消息的一部分,32bit的word; �� :常量数组;H0到H7,当前的数据摘要
  • 输出为新的H0到H7即数据摘要

接下来就是连续的进行数据处理,最开始A~H存储的就是原始的数据摘要初始值。然后处理512bit的block共64次。首先进行W消息区块处理,经过区块处理得到这一轮参与运算的32bit的Wt。计算方式如图所示,这里不详细讲解了。大家可以参考这篇文章:

�� 常量如图所示,因为有64轮运算,所以 �� 数组有64个元素,对应不同的轮次。

t从0遍历到63,通过第t轮此时的���� 的共同参与,我们持续更新A~H的数据

在计算完64轮以后,我们就得到了最后的数据。上面的运算看起来唬人,其实用代码实现没那么复杂。每一步干什么实际上是非常清晰的,只不过有很多的符号,比较容易劝退,大家认真分析一下应该能够理解该算法。实际上就是对输入数据进行64轮的运算(这些运算都是位操作或逻辑运算或基本代数运算),这些运算首先要得到消息区块数据,然后由����持续的去更新A~H。

然后是模块的接口,可以看到仍然要求我们用状态机实现。根据指定的地址message_addr读取数据,并将结果写回output_addr ,这些地址仍然是字地址。消息的大小是固定的20words(640bit)。也就是规定好了输入数据的大小。在运算完成以后将done信号拉高。

数据的组织形式如图所示,我才发现它这个地址是每个相隔1,然后每一个地址存32比特的数据。这样当然可以,但是现代数字系统地址组织形式一般不是这样的。这里还是按照它的课程要求来吧。

然后给了个提示。由于输入数据大小为640bits,所以实际上会形成2个block。对于第一个block,w[0]到w[15]是内存的前16个words。对于第二个block。前128比特存数据。然后存一个1,一直补0到1024-32bit。剩余的32bit存数据的长度32'd640。这里和之前说的数据组织形式其实是一样的,这里重复提醒了大家一下。大家按照这个方式将数据事先存于memory即可。

然后说明模块的时候和内存的时钟是同一时钟。

对于参与SHA256运算的K常数数组,使用parameter int sha256_k[0:63]的方式进行初始化。使用的时候直接选址即可。

然后告诉了大家怎么快速实现右旋转。它这里写错了,应该是{x[0],x[31:1]}。按照它那样成了左旋转了,或者说它的x[31]指的是最低位,跟Python一样。下面的位运算和代码倒是对的。

下节课给大家带来SHA256的状态机实现,其实也很简单。根据大家反馈情况,我决定要不要用别的高速方式实现SHA256算法。


目录
相关文章
|
3月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
69 3
|
1月前
|
算法 安全
散列值使用相同的哈希算法
当使用相同的哈希算法对相同的数据进行散列时,所产生的散列值(也称为哈希值或摘要)总是相同的。这是因为哈希算法是一种确定性的函数,它对于给定的输入将始终产生相同的输出。 例如,如果你用SHA-256算法对字符串"hello world"进行哈希处理,无论何时何地,只要输入是完全一样的字符串,你都会得到相同的160位(40个十六进制字符)的SHA-256散列值。 但是,需要注意的是,即使是输入数据的微小变化也会导致产生的散列值完全不同。此外,不同的哈希算法(如MD5、SHA-1、SHA-256等)会对相同的数据产生不同的散列值。 哈希算法的一个关键特性是它们的“雪崩效应”,即输入中的一点小小
36 4
|
3月前
|
存储 算法 C#
C#哈希查找算法
C#哈希查找算法
|
4月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
172 1
|
3月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
57 0
|
3月前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
5月前
|
JavaScript 算法 前端开发
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
722 1
|
6天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
7天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
7天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。