3

DES-CBCを実装しています。私は何をしているのか混乱してcipher.initcipher.updateますcipher.dofinal。init を使用してキーを設定しdofinal、結果を取得するだけです。アップデートは使いません。あれは正しいですか?

また、 UTF-8ASCIIエンコーディングを使用した場合の結果の違いは何ですか?

これが私のコードです:

byte[] ciphertext;

Cipher enc = Cipher.getInstance("DES/CBC/PKCS5Padding");   

enc.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "DES"), new IvParameterSpec(vector));

// Is this the complete ciphertext?
ciphertext = encrypt.doFinal(data.getbytes("UTF-8"));
4

1 に答える 1

3

Javadoc forは次のようにCipher.doFinal(byte[])述べています (一部強調が追加されています)。

単一部分操作でデータを暗号化または復号化するか、複数部分操作を終了します。この暗号がどのように初期化されたかに応じて、データは暗号化または復号化されます。

入力バッファー内のバイト、および前の更新操作中にバッファーに入れられた可能性のある入力バイトは、パディング (要求された場合) が適用されて処理されます。GCM/CCM などの AEAD モードが使用されている場合、暗号化の場合は認証タグが追加され、復号化の場合は検証されます。結果は新しいバッファに格納されます。

これは、ファイルを暗号化するために (たとえば) すべてのファイルをメモリに読み込む必要がないようにするためです。

于 2014-11-09T02:26:08.187 に答える