KeyGenerator. разница между “AES” в KeyStore и без

169
24 ноября 2018, 01:50

Есть ключик 256 бит, который генерится KeyGenerator таким способом:

 KeyGenerator keyGen = KeyGenerator.getInstance("AES");
 keyGen.init(256);
 key = keyGen.generateKey();

Я хочу его положить в KeyStore, в результате я генерю его так:

KeyGenerator keyGen2 = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, KEYSTORE_TYPE);
    keyGen2.init(new KeyGenParameterSpec.Builder(ALIAS_ANY, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
            .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
            .setKeySize(256)
            .build());
    this.key = keyGen2.generateKey();

В результате encrypt/decrypt уменьшает эффективность в разы. Без BLOCK_MODE_GCM метод крашится в процессе, так же как и без ENCRYPTION_PADDING_NONE.

Чем отличается ключ по умолчанию от моей записи для KeyStore?

Answer 1

Потому что когда вы пишете в строке трансформации просто "AES", например:

 KeyGenerator keyGen = KeyGenerator.getInstance("AES");

По умолчанию выбирается метод трансформации AES/ECB/PKCS5Padding - что конечно же намного быстрее чем метод сцепления блоков GCM

Вообще обычно принято выбирать:

AES/CBC/PKCS7Padding

что является более-менее промышленным стандартом.

READ ALSO
TestNG - параллельный запуск Test Suites

TestNG - параллельный запуск Test Suites

Имеется 4 класса с тестами TestClass1, TestClasss2, TestClass3, TestClass4Нужно создать 2 тест сьюта, каждый из которых будет включать в себя по 2 класса и запустить...

192
JMeter + Git + Jenkins + Maven

JMeter + Git + Jenkins + Maven

Я понимаю что есть возможность запуска Jmeter тестов на Jenkins с GitНо как это сделать - пока не понял, вроде надо через Pipeline , но не понимаю как(вроде...

145
Retrofit android MultiPart

Retrofit android MultiPart

Приложение отправляет изоброжения и несколько строчекПримерно так (пишу на телефоне

184
Непроверяемые (Unchecked) исключения в Java [закрыт]

Непроверяемые (Unchecked) исключения в Java [закрыт]

Какие непроверяемые исключения чаще всего встречаются в реальных проектах? (если можно отсортировать по частоте случаемости)

139