【问题标题】:java.lang.IllegalArgumentException: Unable to initialize due to invalid secret keyjava.lang.IllegalArgumentException:由于密钥无效,无法初始化
【发布时间】:2021-08-24 04:11:21
【问题描述】:

我遇到了加密异常。

我在跑步

  • OS X 10.11
  • Java 1.8
  • Groovy 版本:2.4.4
  • Gradle 2.3-20141027185330+0000;
  • JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

我将 Oracle JCE Policy jar 安装到我的 $JAVA_HOME/lib/security 目录中:

$ ls -l $JAVA_HOME/lib/security
total 16
-rw-r--r--@ 1 root  wheel  2487 Oct  9 17:21 US_export_policy.jar
-rw-r--r--@ 1 root  wheel  2500 Oct  9 17:21 local_policy.jar

这是一个例外:

com.distributedfinance.mbi.bai.lookup.AccountLookupSpec > constructor missing encryptor FAILED
19:05:00.431 [DEBUG] [TestEventLogger]     java.lang.IllegalArgumentException: Unable to initialize due to invalid secret key
19:05:00.431 [DEBUG] [TestEventLogger]         at org.springframework.security.crypto.encrypt.CipherUtils.initCipher(CipherUtils.java:110)
19:05:00.431 [DEBUG] [TestEventLogger]         at org.springframework.security.crypto.encrypt.AesBytesEncryptor.encrypt(AesBytesEncryptor.java:65)
19:05:00.431 [DEBUG] [TestEventLogger]         at org.springframework.security.crypto.encrypt.HexEncodingTextEncryptor.encrypt(HexEncodingTextEncryptor.java:36)
19:05:00.431 [DEBUG] [TestEventLogger]         at com.distributedfinance.mbi.bai.lookup.AccountLookupSpec.setup(AccountLookupSpec.groovy:26)
19:05:00.431 [DEBUG] [TestEventLogger]
19:05:00.431 [DEBUG] [TestEventLogger]         Caused by:
19:05:00.431 [DEBUG] [TestEventLogger]         java.security.InvalidKeyException: Illegal key size
19:05:00.431 [DEBUG] [TestEventLogger]             at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1034)
19:05:00.431 [DEBUG] [TestEventLogger]             at javax.crypto.Cipher.implInit(Cipher.java:800)
19:05:00.431 [DEBUG] [TestEventLogger]             at javax.crypto.Cipher.chooseProvider(Cipher.java:859)
19:05:00.432 [DEBUG] [TestEventLogger]             at javax.crypto.Cipher.init(Cipher.java:1370)
19:05:00.432 [DEBUG] [TestEventLogger]             at javax.crypto.Cipher.init(Cipher.java:1301)
19:05:00.432 [DEBUG] [TestEventLogger]             at org.springframework.security.crypto.encrypt.CipherUtils.initCipher(CipherUtils.java:105)
19:05:00.432 [DEBUG] [TestEventLogger]             ... 3 more

代码片段:

import com.distributedfinance.mbi.payment.repository.AccountRepository
import com.distributedfinance.mbi.domain.Account
import org.springframework.security.crypto.encrypt.Encryptors
import org.springframework.security.crypto.encrypt.TextEncryptor


class AccountLookupSpec extends Specification {
    public static final Logger LOGGER = LoggerFactory.getLogger(AccountLookupSpec.class)

    AccountLookup accountL ookup
    List<Account> accounts
    AccountRepository accountRepository
    TextEncryptor encryptor

    def setup() {
        accountRepository = Mock()
        encryptor = Encryptors.text("password", "991239bab013")

        accounts = new ArrayList<Account>()
        Account account = new Account()
        account.setAccountNumber(encryptor.encrypt("1234567890"))
    }
...

}

【问题讨论】:

  • 你能把你的加密代码放在别的地方吗?我们怎么知道你是否会出错??
  • 这些文件不是 Oracle JDK8 无限强度策略 jar 的正确大小,但它们是 JDK7 的正确大小。确保使用 8 的下载。
  • 你说得对!问题已解决!

标签: java


【解决方案1】:

此问题的最常见原因是 /lib/security 没有安装 Java 加密扩展 (JCE) 无限强度管辖策略文件

Download the Java 7 jar from here

Download the Java 8 jar from here

按照自述文件,您应该可以启动并运行

【讨论】:

    【解决方案2】:

    发生这种情况的其他原因:

    • 您没有在项目中使用 JDK 而不是 JRE
    • 您没有将策略 jar 放在正确的文件夹中(基本上是 JDK/jre/lib/security -- 请参阅自述文件)。

    【讨论】:

      【解决方案3】:

      这是下载 JCE 8 的命令。

      curl -q -L -C - -b "oraclelicense=accept-securebackup-cookie" -o /tmp/jce_policy-8.zip \
         -O http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip && \
         unzip -oj -d /usr/lib/jvm/java-8-oracle/jre/lib/security \
         /tmp/jce_policy-8.zip \*/\*.jar \
         && rm /tmp/jce_policy-8.zip
      

      这假设您在 /usr/lib/jvm/java-8-oracle 有一个 Oracle JVM 8。

      【讨论】:

        【解决方案4】:

        这应该是VERSION mismatch of JAVA JRE上的问题

        我已通过将 JRE 版本从 jdk1.8.0_111\jre 升级到 jdk1.8.0_181\jre 进行修复

        希望您不必拥有额外的库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-13
          • 2017-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-30
          • 1970-01-01
          • 2014-06-14
          相关资源
          最近更新 更多