AES/CBC/PKCS5Padding vs AES/CBC/PKCS7Padding с 256 ключевыми размерами java
В настоящее время я использую AES/CBC/PKCS5Padding
для шифрования файлов на Java с размером ключа 256 байт, но во время поиска я нашел на stackexchange PKCS # 5-PKCS # 7 Padding, и это упоминается,
PKCS # 5 padding - это подмножество дополнений PKCS # 7 для 8-байтовых размеров блоков
Итак, я хочу знать
- Будет ли производительность
AES/CBC/PKCS7Padding
лучше, чем AES/CBC/PKCS5Padding
для указанной выше конфигурации?
- Как мы можем настроить размер блока в Java, как это указано
PKCS # 7 padding будет работать для любого размера блока от 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);
Ответы
Ответ 1
Размер блока является свойством используемого алгоритма шифрования. Для AES всегда 16 байт.
Так что, строго говоря, PKCS5Padding не может использоваться с AES, поскольку он определен только для размера блока в 8 байтов. Я предполагаю, что AES/CBC/PKCS5Padding интерпретируется как AES/CBC/PKCS7Padding внутри.
Единственное различие между этими схемами дополнений состоит в том, что PKCS7Padding имеет размер блока в качестве параметра, тогда как для PKCS5Padding он фиксируется в 8 байтах. Когда размер блока составляет 8 байтов, они делают то же самое.