线程“main”中的exceptionjava.security.InvalidKeyException:非法的键大小或默认参数

下面的代码抛出此错误消息:

Exception in thread "main" java.security.InvalidKeyException: Illegal key size or default parameters

 Cipher dcipher; byte[] salt = new String("12345678").getBytes(); int iterationCount = 1024; int keyStrength = 256; SecretKey key; byte[] iv; Decrypter(String passPhrase) throws Exception { SecretKeyFactory factory = SecretKeyFactory .getInstance("PBKDF2WithHmacSHA1"); System.out.println("factory +" + factory); KeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount, keyStrength); System.out.println("spec " + spec); SecretKey tmp = factory.generateSecret(spec); System.out.println(); key = new SecretKeySpec(tmp.getEncoded(), "AES"); dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); } public String encrypt(String data) throws Exception { dcipher.init(Cipher.ENCRYPT_MODE, key); AlgorithmParameters params = dcipher.getParameters(); iv = params.getParameterSpec(IvParameterSpec.class).getIV(); byte[] utf8EncryptedData = dcipher.doFinal(data.getBytes()); String base64EncryptedData = new sun.misc.BASE64Encoder() .encodeBuffer(utf8EncryptedData); System.out.println("IV " + new sun.misc.BASE64Encoder().encodeBuffer(iv)); System.out.println("Encrypted Data " + base64EncryptedData); return base64EncryptedData; 

有人知道我为什么会收到这个错误吗?

可能你还没有安装JCE Policy文件。

下载此文件:

  • Java 6

  • Java 7

  • Java 8

并在${java.home}/jre/lib/security/.安装该文件${java.home}/jre/lib/security/.

${java.home}指的是Java的安装目录

对于mac:

  • 开放式发现者
  • 命令 + shift + g
  • type /Library/Java/JavaVirtualMachines
  • 导航到您的JDK版本
  • 然后是Contents/Home/jre/lib/security
  • 解压缩下载的文件并将所有文件放在此处

用于CLI

 unzip downloaded_policy_file.zip -d /Library/Java/JavaVirtualMachines//Contents/Home/jre/lib/security/ mv /Library/Java/JavaVirtualMachines//Contents/Home/jre/lib/security/UnlimitedJCEPolicyJDK/* /Library/Java/JavaVirtualMachines//Contents/Home/jre/lib/security rm -rf Library/Java/JavaVirtualMachines//Contents/Home/jre/lib/security/UnlimitedJCEPolicyJDK/ 

从此链接下载JCE for Java 7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

并打开路径C:\Program Files\Java\jdk1.7.0_80\jre\lib\security并粘贴这两个jar子。(即使两个jar子已经存在, C:\Program Files\Java\jdk1.7.0_80\jre\lib\security替换这两个jar子)

对于JAVA 7,下载链接是jce-7-download

将两个下载的jar复制到Java \ jdk1.7.0_10 \ jre \ lib \ security中。将旧jar的备份放在更安全的一侧。

如果您使用自制的Mac

 brew cask install jce-unlimited-strength-policy 

从JDK 1.8u151开始,没有必要单独下载JCE库。 只需编辑:

 $JDK_HOME/jre/lib/security/java.security 

并取消注释该行:

 crypto.policy=unlimited