简体   繁体   English

Bouncy Castle API线程安全吗?

[英]Is Bouncy Castle API Thread Safe?

Is Bouncy Castle API Thread Safe ? Bouncy Castle API线程安全吗? Especially, 特别,

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

I am planning to write a singleton Spring bean for basic level cryptography support in my app. 我打算在我的应用程序中编写一个单独的Spring bean用于基本级加密支持。 Since it is a web application, there are greater chances of multiple threads accessing this component at a time. 由于它是一个Web应用程序,因此多个线程一次访问此组件的可能性更大。 So tread safety is essential here. 因此,踏板安全至关重要。

Please let me know if you have come across such situations using Bouncy Castle. 如果您使用Bouncy Castle遇到过这种情况,请告诉我。

It really does not matter if the API/Code is thread safe. API / Code是否是线程安全的并不重要。 CBC encryption in itself is not thread safe. CBC加密本身并不是线程安全的。 Some terminology - 一些术语 -

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.

A really simple CBC implementation can look like: P1, P2, P3 = Plain text messages 一个非常简单的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.

As you can see, the result of encrypting P1, P2 and P3 (in that order) is different from encrypting P2, P1 and P3 (in that order). 如您所见,加密P1,P2和P3(按此顺序)的结果与加密P2,P1和P3(按此顺序)不同。

So, in a CBC implementation, order is important. 因此,在CBC实施中,订单很重要。 Any algorithm where order is important can not, by definition, be thread safe. 根据定义,任何顺序重要的算法都不能是线程安全的。

You can make a Singleton factory that delivers encryption objects, but you cant trust them to be thread safe. 您可以创建一个提供加密对象的Singleton工厂,但您不能相信它们是线程安全的。

J2ME版本不是线程安全的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM