如何加速openssl生成md5校验和

时间:2015-01-27 04:04:37

标签: multithreading openssl md5 checksum aix

我正面临一个问题,在AIX平台上,我们使用命令生成校验和:

样品:

exec 0<list
while read line 
do
openssl md5 $line >> checksum.out
done

但这持续了很长时间。我发现我们的cpus仍有免费资源。 它是运行多线程的openssl md5吗?如果不是,我怎么能让它通过多线程运行,或使用其他方法来加速它。

最好的问候

空隙

1 个答案:

答案 0 :(得分:0)

如果我从this question的答案和评论中正确理解,那么就无法完成,因为散列算法中的步骤之间存在依赖关系(我想OpenSSL一般会有多线程实现可能的)。

但是,您始终可以通过并行启动openssl md5 n 实例来并行化任务。

例如(假设 n = 4个主题)

while read line; do
  openssl md5 $line >> checksum.out0 &
  openssl md5 $(read) >> checksum.out1 &
  openssl md5 $(read) >> checksum.out2 &
  openssl md5 $(read) >> checksum.out3
done

如果要保持同时运行的确切线程数,则最后一个不应在后台运行。此外,您可能希望确保不同的行需要大约相同的时间才能完成,因此您不会最终遇到竞争条件。

此示例并未经过实际测试(使用$(read)),并且可能有更好的方法(例如,让每个实例将其输出写入单独的文件,然后将它们连接起来 - 例如{ {1}}),但它应该足以帮助你开始。

<强> 编辑: 我刚刚测试过并且cat checksum.out* > checksum.out按照我希望的方式工作,所以通过为每个read实例创建一个新的输出文件,并在末尾增加数字(例如通过包含一个计数器变量),你可以添加脚本末尾的额外行,用于将输出捕获到单个文件中。

结果脚本:

openssl md5

应该做的伎俩(记得事后清理所有的临时文件......)