Spring 启动密码 BadPaddingException: 解密错误
Spring Boot cipher BadPaddingException: Decryption error
我正在关注一篇文章 here,其中描述了如何使用密码来加密 spring 启动应用程序属性。
因此,根据说明,我下载并放置了 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.jks文件,并在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" and "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) 指向 Java 11 SDK,所以当我使用 keytool 生成密钥时,它正在使用 Java 11.
但是在我的 Spring Studio 中,它指向 Java 8 SDK,所以当我 运行 该项目使用Java8读取解密
之后:
- 已卸载 Java 11
- 将 JAVA_HOME(和路径)更改为指向 Java 8 SDK
- 使用 keytool 重新生成密钥
开始工作正常。
我正在关注一篇文章 here,其中描述了如何使用密码来加密 spring 启动应用程序属性。
因此,根据说明,我下载并放置了 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.jks文件,并在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" and "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) 指向 Java 11 SDK,所以当我使用 keytool 生成密钥时,它正在使用 Java 11.
但是在我的 Spring Studio 中,它指向 Java 8 SDK,所以当我 运行 该项目使用Java8读取解密
之后:
- 已卸载 Java 11
- 将 JAVA_HOME(和路径)更改为指向 Java 8 SDK
- 使用 keytool 重新生成密钥
开始工作正常。