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

2022-09-03 01:48:31

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

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

所有的盐键都是一样的,我正在考虑有一个准备好的obj,所有线程都调用它来生成消息摘要。Mac

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

如果这个家伙不是线程安全的,那么有没有等效的(也许来自Apache,...)?

谢谢。


答案 1

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

这是有道理的,因为Mac在任何时候都类似于到目前为止所有先前MAC的总和/xor,因此它不能并行完成。据我所知,没有MAC算法可以并行工作(与某些加密算法相反)。

话虽如此,上述内容是可克隆的,因此,如果您有一个用盐准备的实例,则可以克隆它并使用克隆来计算MAC(尽管我会对此进行测试!Mac


答案 2