gpt4 book ai didi

java - KeyGenerator 线程安全吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:11 25 4
gpt4 key购买 nike

我想知道我是否可以实例化 javax.crypto.KeyGenerator仅一次,然后在多线程环境中使用此实例。

它的 JavaDoc 文档没有说明它的线程安全性。或者使用 ThreadLocal<KeyGenerator> 会更好方法?

更新:一个相关的问题是 Is SecureRandom thread safe?虽然 JavaDoc 没有声明该类是线程安全的,但社区仍然认为它线程安全的决定从实践的角度来看非常重要。我想知道 KeyProvider 的情况。

最佳答案

除非文档明确保证线程安全,否则将任何事物视为非线程安全

你是对的,这种哲学对线程安全文档的稀缺性几乎没有帮助......但是如果没有保证线程安全的文档,那么你就不能假设某些东西是或将继续是 线程安全。


这是对 KeyGenerator 的实际实现的一些研究,以及为什么我们不能假设它是线程安全的

我找到了 the source乍一看,当前的实现似乎是线程安全的。然而,即使我们假设这个实现永远不会改变,它也会调用Security Providers,这可能是他们自己的任何实现,也不能保证是线程安全的,因为文档对此只字不提。


来源摘要:

调用 generateKey() 使用“ key 生成器服务提供者”调用 KeyGeneratorSpi.engineGenerateKey() (这可能是线程不安全的) 生成 SecretKey

如果您使用特定的提供程序构造 KeyGenerator,那么它将使用该特定的提供程序来生成 key 。

如果您没有使用特定提供程序构造 KeyGenerator,则 nextSpi() 将迭代(线程安全)可用提供程序的 JVM 列表并尝试生成 key 直到一个有效或您用完供应商..


要点是文档...如果文档没有提到线程安全,那么任何当前的实现者或对当前实现的更新可能不是线程安全的。

因此,您根本无法假设或依赖 KeyGenerator 的任何线程安全性。

关于java - KeyGenerator 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com