0
私が理解しているPKCS5 and PKCS7パディングは、最後のブロックがいっぱいになるようにプレーンテキストに平文にバイトを追加することです。暗号テキストが解読されると、最後のブロックが検査され、パディング・バイトはどのバイトがパディングされ、どのテキストがプレーン・テキストであるかを示す。JavaがPKCS5パディングを追加していない
Javaで128ビットAESとPKCS5を使用して8バイト(ブロック未満)を暗号化すると、doFinal()
の結果はわずか8バイトです。
PKCS7は適用されませんでしたか?
Random secureRandom = new SecureRandom();
byte[] ctr = new byte[16];
byte[] keyBytes = new byte[16];
secureRandom.nextBytes(ctr);
secureRandom.nextBytes(keyBytes);
IvParameterSpec ivSpec = new IvParameterSpec(ctr);
Key key = new SecretKeySpec(keyBytes, "AES");
byte[] plainText = new byte[8];
Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
byte[] cipherText = cipher.doFinal(plainText);
System.out.println(cipherText.length);
開発者がエラーをうまく処理しないのは驚きではありません。正しいPKCS7Paddingオプションをサポートするために開発者が怠けている 'PKCS5Padding'オプションを見れば、混乱の原因になります。 – zaph