密码线程安全吗?

很简单,是否可以从多个线程中使用一个(例如)的实例,或者我是否需要将多个实例(在我的情况下)粘贴到一个(在我的情况下)?javax.crypto.CipherCipher.getInstance("RSA")ThreadLocal


答案 1

不,它不是。实例是有状态的。因此,您需要将其存储在线程本地,或者在每次加密/解密调用时获取一个新实例,或者将其包装在块中。synchronized(cipher)

Threadsafety在javadocs中通常被称为“线程安全”或“不是线程安全”。对于密码来说,情况并非如此,因此您不应假定它是线程安全的。


答案 2

即使密码是线程安全的,同时从多个线程使用它也没有用。

您输入和取出密码的字节(通过其和方法)是一个连续的流。这意味着,在另一端,它们必须以相同的顺序传递才能有意义。如果只有一个线程执行此操作,则这是最容易实现的。updatefinish

如果使用多个线程,则通常需要在调用之间进行调用 - 然后无论如何都需要外部同步。reset