Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalArgumentException:由于密钥无效,无法初始化_Java - Fatal编程技术网

java.lang.IllegalArgumentException:由于密钥无效,无法初始化

java.lang.IllegalArgumentException:由于密钥无效,无法初始化,java,Java,我收到一个加密异常 我在跑步 OSX10.11 Java 1.8 Groovy版本:2.4.4 梯度2.3-20141027185330+0000 JAVA_HOME=/Library/JAVA/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/HOME 我将Oracle JCE策略JAR安装到$JAVA_HOME/lib/security目录中: $ ls -l $JAVA_HOME/lib/security total 16 -rw-r--r--@

我收到一个加密异常

我在跑步

  • OSX10.11
  • Java 1.8
  • Groovy版本:2.4.4
  • 梯度2.3-20141027185330+0000
  • JAVA_HOME=/Library/JAVA/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/HOME
我将Oracle JCE策略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"))
    }
...
import com.distributedfinance.mbi.payment.repository.AccountRepository
导入com.distributedfinance.mbi.domain.Account
导入org.springframework.security.crypto.encrypt.Encryptors
导入org.springframework.security.crypto.encrypt.TextEncryptor
类AccountLookupSpec扩展了规范{
公共静态最终记录器Logger=LoggerFactory.getLogger(AccountLookupSpec.class)
AccountLookup accountL ookup
列出帐户
AccountRepository AccountRepository
文本加密机
def设置(){
accountRepository=Mock()
encryptor=Encryptors.text(“密码”,“991239bab013”)
accounts=new ArrayList()
账户=新账户()
account.setAccountNumber(encryptor.encrypt(“1234567890”))
}
...

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

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

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


按照ReadMe文件进行操作,您应该已经启动并运行了

这里有一个下载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,这可能是java JRE版本不匹配的问题

通过将JRE版本从
jdk1.8.0\u 111\JRE
升级到
jdk1.8.0\u 181\JRE


希望您不必有额外的库。

您可以将加密代码放在其他位置,我们如何判断您是否会出错?这些文件的大小对于Oracle JDK8 unlimited strength policy JAR来说并不正确,但是对于JDK7来说是正确的大小。确保你使用下载的8。你是对的!问题解决了!