私は現在、Java with256 bytes)キーサイズでファイルを暗号化するためにAES/CBC/PKCS5Padding
を使用していますが、検索中にstackexchangeで見つけました PKCS#5-PKCS#7 Padding と記載されていますが、
PKCS#5パディングは、8バイトブロックサイズのPKCS#7パディングのサブセットです
だから私は知りたい
AES/CBC/PKCS7Padding
のパフォーマンスは、上記の構成のAES/CBC/PKCS5Padding
よりも優れていますか?PKCS#7パディングは、1〜255バイトの任意のブロックサイズで機能します。
私のサンプルコードは、
SecureRandom rnd = new SecureRandom();
IvParameterSpec iv = new IvParameterSpec(rnd.generateSeed(16));
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(256);
SecretKey k = generator.generateKey();
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, k, iv);
ブロックサイズは、使用される暗号アルゴリズムのプロパティです。 AESの場合、常に16バイトです。
厳密に言えば、PKCS5Paddingは8バイトのブロックサイズに対してのみ定義されているため、AESでは使用できません。 AES/CBC/PKCS5PaddingはAES/CBC/PKCS7Paddingとして内部的に解釈されると思います。
これらのパディングスキームの唯一の違いは、PKCS7Paddingがパラメーターとしてブロックサイズを持っているのに対し、PKCS5Paddingの場合は8バイトに固定されていることです。ブロックサイズが8バイトの場合、まったく同じです。