Hash 哈希算法的组合实现

Hash 哈希算法的组合实现,hash,vhdl,verilog,Hash,Vhdl,Verilog,我正在从事一个需要使用哈希算法组合实现的项目。VHDL/Verilog是目标语言,因为我希望在FPGA上工作。我做了一些搜索,发现了MD5和SHA1的RFC规范,但我似乎在任何地方都找不到VHDL/Verilog中的组合(请避免时钟)实现。你知道吗?散列算法本身并不重要,只要它至少和MD1一样强大。这是一个有趣的古怪要求 我想你会很难找到一个——哈希通常需要高吞吐量,这往往意味着大量的流水线和快速的时钟以及寄存器 不过写起来应该不会太难: 为算法中使用的各种“混合”阶段编写模块/实体 创建一个

我正在从事一个需要使用哈希算法组合实现的项目。VHDL/Verilog是目标语言,因为我希望在FPGA上工作。我做了一些搜索,发现了MD5和SHA1的RFC规范,但我似乎在任何地方都找不到VHDL/Verilog中的组合(请避免时钟)实现。你知道吗?散列算法本身并不重要,只要它至少和MD1一样强大。

这是一个有趣的古怪要求

我想你会很难找到一个——哈希通常需要高吞吐量,这往往意味着大量的流水线和快速的时钟以及寄存器

不过写起来应该不会太难:

  • 为算法中使用的各种“混合”阶段编写模块/实体
  • 创建一个圆形实体,将混合实体按正确顺序排列
  • 对使用
    生成
    循环(或其Verilog等效循环)以创建所需的所有循环

从用C编写的MD5或SHA1的实现开始。然后手动将算法中的每个步骤转换为流程图中的一个步骤。C代码中的每个算术或逻辑运算都成为组合逻辑运算(门)。C代码中的源和目标变量成为硬件设计中的输入和输出端口。C代码中的临时变量成为连接组合逻辑块的内部网络的名称

理论上,应该可以创建这些算法的纯组合实现。实际上,您可能会发现它需要太多的硬件资源(加法器、乘法器等),并且需要重用资源。一旦您需要重用资源,就需要引入一些中间寄存器,这样您的输出在一定数量的时钟周期内将无效。

检查

它有许多可用的加密核心,需要研究源代码。

它是否需要纯粹的组合,因为您有一个异步设计?它需要纯粹的组合,因为我希望实现在代码的合成版本中只有查找表。是的。。。我想我将直接从代码中把一些C代码转换成VHDL/Verilog。非常感谢。我想我在互联网上看到了一个以这种方式实现SHA1的项目。这是个好主意。。。我要试一试。非常感谢。