Я следую за статьей здесь , где описывается, как использовать шифр для шифрования свойств приложения с весенней загрузкой.
Итак, основываясь на инструкции, я загрузил и установил 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
Я не уверен, как я могу решить эту проблему, любая помощь приветствуется.