gpt4 book ai didi

java - javax.crypto.spec.SecretKeySpec 线程安全吗?

转载 作者:行者123 更新时间:2023-12-01 12:42:40 25 4
gpt4 key购买 nike

我打算在 spring bean 中将它用作静态字段,并在 post 构造方法中对其进行初始化。
服务类将注入(inject)此加密 bean 并调用其公开的方法以使用密码 (javax.crypto.Cipher) 加密字符串(密码将使用 SecretKeySpec 初始化)。

注意:每次在加密字符串方法中都会获取一个新的密码实例。

编辑:
正如@Savior 所指出的,该字段(SecretKeySpec)不应表示为静态。如果 SecretKeySpec 是线程安全的,那么我会将其作为配置类中的 bean 并将其注入(inject)加密 bean(将其标记为私有(private) final 字段并通过构造函数注入(inject))

最佳答案

是的。很容易看出原因:没有改变 SecretKeySpec 状态的方法(第一节,见下文)。实例。换句话说,类通常是不可变的,即使在类描述中没有特别提到。根据定义,不可变类是线程安全的。实际上,如果不是全部的话,大多数 Key实现通常是不可变的。

有一种方法可以打破不变性(我忘记了),那就是较新的 Key.destroy() 方法。不过不用担心,Cipher 不会调用它。或据我所知的任何其他功能。此外,SecretKeySpec 没有实现该方法。 (在 OpenJDK 中检查到版本 14)。

正如评论中还指出的那样,您永远不应该将任何动态信息放入静态字段中。相反,只需共享引用即可。

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

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