0

プログラム内の一部のデータを暗号化するために、次のコードの平和を使用しています。

cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(rawCipherKey, "AES"), new IvParameterSpec(rawCipherIV));

そして別の方法で:

try {
   cipher.doFinal(buffer, 0, len, encryptedBuffer, 12);
} catch (Exception e) {
   throw new RuntimeException(e);
}

doFinal が例外をスローしています。

java.lang.RuntimeException: javax.crypto.IllegalBlockSizeException: data not block size aligned

しかし、これは問題ではなく、その理由を理解しています。

データを暗号化するための次の指示があります。

データを暗号化しますが、完全な 16 バイト ブロックのみを使用し、残りは暗号化されません

別の方法があるかどうか誰が教えてくれますか。のために

Cipher.getInstance("AES/CBC/DO_PADDING_BUT_ONLY_16_BYTES_AND_LEAVE_REST_UNENCRYPTED");

またはどうすればこれを達成できますか?

4

1 に答える 1

0

必要なものをサポートするパディング スキームはありません。

代わりに、暗号化の前にデータを分析してください。残りのプレーンテキストを追加する前に、利用可能なデータのブロックをできるだけ多く取り、それを暗号化します。

于 2013-09-20T12:37:59.180 に答える