我遇到了一些使用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;
}
答案 0 :(得分:4)
算法为Blowfish,在Cipher Block Chaining操作模式下运行。 Blowfish允许各种密钥大小,从32位到448位。也就是说,它使用64位块大小(它可以在一个段中加密的数据量),这不像在AES这样的密码中找到的128位块大小那么安全。否则,只要您使用128位或更大的密钥大小,Blowfish就是一种非常安全的密码。
也就是说,在重新加密操作时它并不是非常高效(它需要永远重新生成密钥,这就是为什么它的关键时间表是bcrypt的基础)。您最好的选择是使用AES-256(将BlowfishEngine
替换为AESEngine
)。
就密钥大小而言,基于您的评论,您似乎正在尝试直接使用密码作为加密密钥。这是一种非常糟糕的做法,并且很容易暴力加密。您应该使用密码来驱动密钥派生函数,如PBKDF2,这将为您提供更安全,更长的密钥。查看this answer以获得在Java中使用BouncyCastle执行此操作的好方法。