web-dev-qa-db-ja.com

256キーサイズのパフォーマンスでのAES / CBC / PKCS5PaddingとAES / CBC / PKCS7Padding java

私は現在、Java with256 bytes)キーサイズでファイルを暗号化するためにAES/CBC/PKCS5Paddingを使用していますが、検索中にstackexchangeで見つけました PKCS#5-PKCS#7 Padding と記載されていますが、

PKCS#5パディングは、8バイトブロックサイズのPKCS#7パディングのサブセットです

だから私は知りたい

  1. AES/CBC/PKCS7Paddingのパフォーマンスは、上記の構成のAES/CBC/PKCS5Paddingよりも優れていますか?
  2. Java言及されているようにでブロックサイズを設定するにはどうすればよいですか?]

    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);
21
dbw

ブロックサイズは、使用される暗号アルゴリズムのプロパティです。 AESの場合、常に16バイトです。

厳密に言えば、PKCS5Paddingは8バイトのブロックサイズに対してのみ定義されているため、AESでは使用できません。 AES/CBC/PKCS5PaddingはAES/CBC/PKCS7Paddingとして内部的に解釈されると思います。

これらのパディングスキームの唯一の違いは、PKCS7Paddingがパラメーターとしてブロックサイズを持っているのに対し、PKCS5Paddingの場合は8バイトに固定されていることです。ブロックサイズが8バイトの場合、まったく同じです。

33
Henry