Spring Boot cipher BadPaddingException:解密错误



我在这里关注一篇文章,它描述了如何使用密码来加密spring-boot应用程序属性。

因此,根据指令,我下载并放置了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

之后,我复制了Spring项目resource文件夹中的server.js文件,并将以下属性添加到resource下的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

现在,当我运行应用程序时,我可以通过对进行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

我不确定,我如何才能解决这个问题,任何帮助都表示感谢。

我已经找到了这个问题,它与Java环境有关,我的盒子上安装了多个Java SDK,我的Java_HOME(和PATH(指向Java11SDK,所以当我使用密钥工具生成密钥时,它使用的是java11

然而,在我的SpringStudio中,它指向Java8SDK,所以当我运行该项目时,它使用Java 8进行读取和解密。

因此之后:

  • 已卸载Java 11
  • 将JAVA_HOME(和PATH(更改为指向JAVA 8 SDK
  • 使用keytool重新生成密钥

它开始正常工作。

相关内容

  • 没有找到相关文章

最新更新