【问题标题】:Spring Boot cipher BadPaddingException: Decryption errorSpring Boot cipher BadPaddingException:解密错误
【发布时间】:2019-05-02 00:39:15
【问题描述】:

我正在关注一篇文章 here,其中描述了如何使用密码加密 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 项目 resource 文件夹中的 server.jks 文件,并将以下属性添加到 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

现在,当我运行应用程序时,我可以通过对 "http://localhost/encrypt" 和 "http://localhost/decrypt" 端点进行 POST 调用来轻松加密或解密。 p>

我也可以使用 TextEncryptor 在代码中成功加密或解密。

但是当我加密一些值并将加密后的值添加到application.properties时,如下所示:

messageinfo={cipher}AQBt2RnIRqX1UrHGfvcJpQhfurqbxjGEgeHh....

当我再次运行应用程序时,我得到了

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

我不确定如何解决这个问题,感谢任何帮助。

【问题讨论】:

    标签: spring-boot encryption keystore badpaddingexception


    【解决方案1】:

    我设法找到了问题,这是与 Java 环境 相关的问题,我的盒子上安装了多个 Java SDK,我的 JAVA_HOME (and PATH) 是指向Java 11 SDK,所以当我使用keytool生成密钥时,它使用的是Java 11。

    但是在我的 Spring Studio 中,它指向 Java 8 SDK,所以当我运行项目时,它使用 Java 8 来读取和解密。

    之后:

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

    它开始工作正常。

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 2012-11-02
      • 2011-02-24
      • 2018-09-15
      • 2023-04-09
      • 2017-10-29
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多