有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程在java中是Mac#doFinal()线程安全的吗?

在java中,我们需要为过多的文本数据生成HmacSHA1/256消息摘要,当然是并行的

现在的问题是javax.crypto.Mac#doFinal(byte[]:arg)是线程安全的,还是sun/oracle(hotspot)实现的SPI更好

所有salt键都是相同的,我正在考虑准备一个Macobj,所有线程都调用它来生成消息摘要

我无法理解并用javadoc来陈述它

如果这个家伙不是线程安全的,那么有没有类似的东西(可能来自Apache,…)

谢谢


共 (1) 个答案

  1. # 1 楼答案

    所有javax.crypto.Mac#doFinal方法都不是线程安全的,因为它们会更改MAC的内部状态

    这是有道理的,因为在任何一点上的mac都类似于该点之前所有mac的总和/xor,所以它不能并行进行。据我所知,没有一种MAC算法可以并行工作(与某些加密算法相反)

    如上所述,Mac是可克隆的,所以如果你有一个用salt初始化的实例,你可以克隆它并使用克隆来计算mac(不过我会测试这个!)