And*_*Dev 2 encryption bouncycastle
我遇到了一些使用 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;
}
Run Code Online (Sandbox Code Playgroud)
该算法是Blowfish ,在密码块链接操作模式下运行。Blowfish 允许多种密钥大小,从 32 位到 448 位。也就是说,它使用 64 位块大小(可以在一个段中加密的数据量),这不如 AES 等密码中的 128 位块大小安全。除此之外,只要您使用 128 位或更大的密钥大小,Blowfish 就是一种非常安全的密码。
也就是说,在重新生成密钥操作方面,它的性能不是很好(重新生成密钥需要很长时间,这就是为什么它的密钥计划是 bcrypt 的基础)。最好的选择是使用 AES-256(替换BlowfishEngine为AESEngine)。
就密钥大小而言,根据您的评论,您似乎正在尝试直接使用密码作为加密密钥。这是一种非常糟糕的做法,并且很容易暴力破解您的加密。相反,您应该使用密码来驱动密钥派生函数(例如 PBKDF2),这将为您提供更安全、更长的密钥。查看此答案,了解在 java 中使用 BouncyCastle 执行此操作的好方法。