Spring Boot шифр BadPaddingException: ошибка дешифрования - PullRequest
0 голосов
/ 30 ноября 2018

Я следую за статьей здесь , где описывается, как использовать шифр для шифрования свойств приложения с весенней загрузкой.

Итак, основываясь на инструкции, я загрузил и установил JCE JavaФайлы расширения криптографии (JCE).

Затем я создал хранилище ключей,

keytool -genkeypair -alias mytestkey -keyalg RSA 
  -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" 
  -keypass changeme -keystore server.jks -storepass letmein 
  -validity 365

После этого я скопировал файл server.jks в папку проекта Spring resource .и добавьте следующие свойства в файл bootstrap.properties, который также находится в папке resource .

Содержимое файла bootstrap.properties выглядит следующим образом:

encrypt.key-store.location: classpath:/server.jks
encrypt.key-store.password=letmein
encrypt.key-store.alias=mytestkey
encrypt.key-store.secret=changeme

Теперь, когда я запускаю приложение, я могу легко зашифровать или расшифровать, сделав POST-вызов на "http://localhost/encrypt" и " http://localhost/decrypt" конечных точек.

И яможно успешно зашифровать или расшифровать в коде, используя TextEncryptor .

Однако, когда я шифрую какое-то значение и добавляю зашифрованное значение в application.properties, как показано ниже:

messageinfo={cipher}AQBt2RnIRqX1UrHGfvcJpQhfurqbxjGEgeHh....

Когда я снова запускаю приложение, я получаю

java.lang.IllegalStateException: Cannot decrypt: key=messageinfo
javax.crypto.BadPaddingException: Decryption error

Я не уверен, как я могу решить эту проблему, любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 декабря 2018

Мне удалось найти проблему, она была связана с Java-средой , на моем компьютере было установлено несколько Java SDK, My JAVA_HOME (и PATH) указывал на Java 11 SDK , поэтому, когда я использовал keytool для генерации ключа, он использовал Java 11 .

Однако в моей Spring Studio он указывал на Java 8 SDK , поэтому при запуске проекта он использовал Java 8 для чтения и дешифрования.

Итак, после:

  • Uninstalled Java11
  • Изменен JAVA_HOME (и PATH), чтобы он указывал на Java 8 SDK
  • Восстановленный ключ с помощью keytool

Он начал работать нормально.

...