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で、 Cipher Block Chaining操作モードで実行されます。Blowfish では、32 ビットから 448 ビットまでの幅広い鍵サイズを使用できます。とはいえ、64 ビットのブロック サイズ (1 つのセグメントで暗号化できるデータの量) を使用しますが、これは AES などの暗号で見られる 128 ビットのブロック サイズほど安全ではありません。それ以外の場合、128 ビット以上のキー サイズを使用する限り、Blowfish は非常に安全な暗号です。

とはいえ、キーの再生成操作に関してはあまりパフォーマンスが高くありません (キーの再生成には永遠に時間がかかります。そのため、キー スケジュールが bcrypt の基礎となっています)。あなたの最善の策は、AES-256 を使用することBlowfishEngineです( AESEngine.

キーサイズに関する限り、コメントに基づいて、パスワードを暗号化キーとして直接使用しようとしているようです。これは非常に悪い習慣であり、暗号化をブルート フォースするのが非常に簡単になります。代わりに、パスワードを使用して PBKDF2 などのキー派生関数を駆動する必要があります。これにより、より安全で長いキーが得られます。JavaでBouncyCastleを使用してこれを行う良い方法については、この回答を確認してください。

于 2013-02-05T15:33:29.463 に答える