作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在java中,我们需要为太多的文本数据生成HmacSHA1/256消息摘要,当然还要并行。
现在的问题是,javax.crypto.Mac#doFinal(byte[]:arg)
是线程安全的,还是通过 sun/oracle(hotspot) 实现 SPI 更好?
所有的盐键都是相同的,我正在考虑准备一个 Mac
obj,所有线程都会调用它来生成消息摘要。
我无法用javadoc 来理解和表述它.
如果这个人不是线程安全的,是否有任何等效项(可能来自 Apache,...)?
谢谢。
最佳答案
javax.crypto.Mac#doFinal
方法都不是线程安全的,因为它们会更改 MAC 的内部状态。
这是有道理的,因为任何时候的 mac 都类似于该点之前所有先前 MAC 的总和/异或,因此它无法并行完成。据我所知,没有 MAC 算法可以并行工作(与某些加密算法相反)。
综上所述,Mac
是可克隆的,因此如果您有一个用盐启动的实例,您可以克隆它并使用克隆来计算 MAC(不过我会测试这个!)
关于java - Mac#doFinal() 在 Java 中是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31898802/
我是一名优秀的程序员,十分优秀!