Наш клиент жалуется на то, что ключ шифрования хранится в Tomcat context.xml в виде простого текста (ну, он определенно прав в этом пункте).
И он хочет использовать внешнее хранилище ключей для хранения этого ключа шифрования.
Мне удалось создать хранилище ключей и поместить туда симметричный ключ с помощью следующей команды:
keytool -importpassword -alias encryption-key -keystore your.keystore -storetype pkcs12
Это хранилище ключей имеет тип 'PSCS12' и, фактически, может хранить симметричные ключи.
Мой сохраненный пароль имеет псевдоним 'Ключ шифрования' .
'your.keystore' - это файл хранилища ключей.
Но у меня проблема - Я не могу ее извлечь.
Если я попытаюсь извлечь его из java-кода - тогда мне нужно будет указать число итераций, например:
final SecretKey secretKey = (SecretKey) keyStore.getKey(alias, password.toCharArray());
System.out.println("[*] Encryption algorithm: " + secretKey.getAlgorithm());
Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm());
AlgorithmParameterSpec algorithmParameterSpec = new PBEParameterSpec(SALT, ITERATION_COUNT);
cipher.init(Cipher.DECRYPT_MODE, secretKey, algorithmParameterSpec);
String decryptedData = Arrays.toString(cipher.doFinal(secretKey.getEncoded()));
System.out.println("Decrypted Key: " + decryptedData);
Но я не уверен, какие значения я должен предоставить ему, потому что я хранил свою фразу-пароль с помощью командной строки.
Используемый алгоритм шифрования - PBEWithMD5AndDES.
Я могу видеть мою сохраненную фразу-пароль в сеансе отладчика, я могу даже увидеть длину фразы-пароля, но не могу ее расшифровать.
Итак, какие у меня есть варианты? Заказчик хочет иметь стандартную реализацию (JCA).
Как я могу извлечь мою парольную фразу, которая была сгенерирована командой выше?