Is 充气城堡 API http://bouncycastle.org/java.html线程安全?尤其,
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 实现中,顺序很重要。根据定义,任何顺序很重要的算法都不能是线程安全的。
您可以创建一个提供加密对象的单例工厂,但您不能相信它们是线程安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)