快速入门数字芯片设计,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算法。


目录
相关文章
|
12天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
30 3
|
17天前
|
存储 算法 C#
C#哈希查找算法
C#哈希查找算法
|
2月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
66 1
|
25天前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
29 0
|
27天前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
3月前
|
算法 安全 JavaScript
安全哈希算法:SHA算法
安全哈希算法:SHA算法
46 1
安全哈希算法:SHA算法
|
3月前
|
JavaScript 算法 前端开发
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
410 1
|
8天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
26天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
5天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。