11

Bouncy Castle API线程安全吗?尤其,

org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher
org.bouncycastle.crypto.paddings.PKCS7Padding
org.bouncycastle.crypto.engines.AESFastEngine
org.bouncycastle.crypto.modes.CBCBlockCipher

我打算在我的应用程序中编写一个单例 Spring bean 来支持基本级别的密码学。由于它是一个 Web 应用程序,因此多个线程一次访问该组件的机会更大。因此,胎面安全在这里至关重要。

如果您在使用 Bouncy Castle 时遇到过此类情况,请告诉我。

4

2 回答 2

13

API/代码是否是线程安全的并不重要。CBC 加密本身不是线程安全的。一些术语 -

E(X) = Enctrypt message X
D(X) = Dectrypt X. (Note that D(E(X)) = X)
IV = Initialization vector. A random sequence to bootstrap the CBC algorithm
CBC = Cipher block chaining.

一个非常简单的 CBC 实现如下所示: P1、P2、P3 = 纯文本消息

1. Generate an IV, just random bits.
2. Calculate E( P1 xor IV) call this C1
3. Calculate E( P2 xor C1) call this C2
4. Calculate E( P3 xor C2) call this C3.

如您所见,加密 P1、P2 和 P3(按该顺序)的结果与加密 P2、P1 和 P3(按该顺序)不同。

因此,在 CBC 实现中,顺序很重要。根据定义,任何顺序很重要的算法都不能是线程安全的。

您可以创建一个传递加密对象的单例工厂,但您不能相信它们是线程安全的。

于 2008-09-08T11:23:51.583 回答
0

J2ME 版本不是线程安全的。

于 2010-12-03T12:59:14.310 回答