我在这里关注一篇文章,其中描述了如何使用密码来加密 Spring Boot 应用程序属性。
因此,根据说明,我下载并放置了 JCE Java Cryptography Extension (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
之后,我复制了 Spring 项目资源文件夹中的 server.jks 文件,并将以下属性添加到资源文件夹下的 bootstrap.properties 文件中。
bootstrap.properties 文件的内容如下所示:
encrypt.key-store.location: classpath:/server.jks
encrypt.key-store.password=letmein
encrypt.key-store.alias=mytestkey
encrypt.key-store.secret=changeme
现在,当我运行应用程序时,我可以通过对“ http://localhost/encrypt ”和“ http://localhost/decrypt ” 端点进行 POST 调用来轻松加密或解密。
我也可以使用TextEncryptor在代码中成功加密或解密。
但是,当我加密一些值并将加密后的值添加到 application.properties 时,如下所示:
messageinfo={cipher}AQBt2RnIRqX1UrHGfvcJpQhfurqbxjGEgeHh....
当我再次运行应用程序时,我得到
java.lang.IllegalStateException: Cannot decrypt: key=messageinfo
javax.crypto.BadPaddingException: Decryption error
我不确定如何解决这个问题,任何帮助表示赞赏。