是
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的这种情况,请让我知道.
解决方法
如果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的实施中,顺序很重要.顺序重要的任何算法根据定义不能是线程安全的.
您可以使一个提供加密对象的Singleton工厂,但您不能相信它们是线程安全的.