2

我遇到了一些使用 Bouncy Castle 加密数据的代码,但我找不到任何文档来说明正在使用哪种算法来加密数据或密钥使用了多少位。我也找不到 Bouncy Castle 的讨论论坛。有谁知道这是使用什么算法以及密钥有多少位?

BlowfishEngine blowfishEngine = new BlowfishEngine();
CBCBlockCipher cbcBlockCipher = new CBCBlockCipher(blowfishEngine); 

KeyParameter key = new KeyParameter(key);

BufferedBlockCipher cipher = new PaddedBlockCipher(cbcBlockCipher);

cipher.init(true, key);

int size = cipher.getOutputSize(data.length);
byte[] result = new byte[size];
int olen = cipher.processBytes(data, 0, data.length, result, 0);
olen += cipher.doFinal(result, olen);

if (olen < size)
{
  byte[] tmp = new byte[olen];
  System.arraycopy(result, 0, tmp, 0, olen);
  result = tmp;
}
4

1 回答 1

4

该算法是Blowfish,在密码块链接操作模式下运行。Blowfish 允许从 32 位到 448 位的各种密钥大小。也就是说,它使用 64 位块大小(它可以在一个段中加密的数据量),它不如 AES 等密码中的 128 位块大小安全。否则,Blowfish 是一种非常安全的密码,只要您使用 128 位或更大的密钥大小。

也就是说,在重新加密操作时,它的性能不是很好(重新加密需要很长时间,这就是为什么它的密钥调度是 bcrypt 的基础)。您最好的选择是使用 AES-256(换成BlowfishEngineAESEngine

就密钥大小而言,根据您的评论,您似乎正在尝试直接使用密码作为加密密钥。这是一个非常糟糕的做法,并且很容易暴力破解你的加密。您应该改为使用密码来驱动像 PBKDF2 这样的密钥派生函数,这将为您提供更安全、更长的密钥。查看此答案,了解在 java 中使用 BouncyCastle 执行此操作的好方法。

于 2013-02-05T15:33:29.463 回答