我正在研究不同处理器上SHA1,SHA-256,SHA-512的速度(计算散列的时间)
这些散列算法可以分解为跨多个核心/线程运行吗?
答案 0 :(得分:13)
如果您想要并行计算单个哈希的执行(无论风味1,256或512),那么答案很遗憾。这是因为定义了SHA转换函数的方式。它在固定大小的块上运行,但是接下来需要每个块的转换输出,因此您无法并行运行计算。
显然,对于不同的输入字符串,可以并行运行多个哈希值,但我认为你已经知道了。
如果你想要的是使用底层SHA变换为大输入生成摘要,你可以定义一个任意方案来分割输入,然后并行地为每个段生成摘要块。然后将这些结合起来......
这样的事情:
| ------------------ large input ---------------------------------------------|
| b0 | b1 | b2 | | | | bn |
您可以并行生成H(b0), H(b1), .. H(bn)
。
然后,生成H_OUT = H(H(b0) + H(b1) + .. + H(bn))
(其中+
符号可以是连接或简单的XOR,但这些很可能不在加密方面很强。)
此方法将受益于多个核心,但H_OUT
不等同于计算原始大输入的单个散列。