AES 256加密报错Illegal key size
时间: 2023-11-07 09:35:23 浏览: 36
这个错误是因为JDK默认只支持AES 128位加密,而AES 256位加密需要使用Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files,这个文件可以从Oracle官网下载。
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
下载后,将下载的文件解压缩,将其中的两个jar文件(local_policy.jar和US_export_policy.jar)复制到%JRE_HOME%\lib\security目录下,替换原有的文件即可。
如果还是报错,可以检查JRE的版本是否正确,如果是32位的JRE,则需要下载并安装32位的JCE文件,反之,如果是64位的JRE,则需要下载并安装64位的JCE文件。
相关问题
java程序部署到linux服务器时aes加密报错Illegal key size or default parameters
当Java程序在Linux服务器上运行时,如果使用AES加密并使用256位密钥,则可能会出现“java.security.InvalidKeyException: Illegal key size or default parameters”的异常。这是因为默认情况下,Java不允许使用256位密钥进行加密。要解决此问题,需要执行以下步骤:
1.下载Java Cryptography Extension (JCE) Unlimited Jurisdiction Policy Files。这些文件包含允许使用256密钥的策略文件。
2.解压缩下载的文件,并将其中的两个JAR文件(local_policy.jar和US_export_policy.jar)复制到$JAVA_HOME/jre/lib/security目录中。如果该目录中已经存在这些文件,请备份它们并替换为新文件。
3.重新启动Java应用程序并尝试使用256位密钥进行AES加密。
下面是一个示例代码,演示如何使用256位密钥进行AES加密:
```java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AesEncryptionExample {
private static final String ALGORITHM = "AES";
private static final String KEY = "0123456789abcdef0123456789abcdef";
public static String encrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptedValue = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encryptedValue);
}
public static String decrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decodedValue = Base64.getDecoder().decode(value);
byte[] decryptedValue = cipher.doFinal(decodedValue);
return new String(decryptedValue);
}
public static void main(String[] args) throws Exception {
String originalValue = "Hello World!";
String encryptedValue = encrypt(originalValue);
String decryptedValue = decrypt(encryptedValue);
System.out.println("Original Value: " + originalValue);
System.out.println("Encrypted Value: " + encryptedValue);
System.out.println("Decrypted Value: " + decryptedValue);
}
}
```
Illegal key size
Illegal key size 是一个Java中的错误信息,它表示密钥大小不合法。
在默认情况下,Java仅支持AES 128位的密钥。如果您计划使用更大的密钥,如192位或256位,Java编译器会抛出Illegal key size错误。这是由于美国法律的限制所导致的。
为了解决这个问题,您可以通过修改Java安全性属性来解除密钥大小限制。打开java.security文件,并找到定义java安全性属性crypto.policy的行,将其值改为unlimited即可。这将允许Java支持更大的密钥。
如果您需要下载JDK 8的国内地址,可以访问https://wwi.lanzoup.com/iXGs404zm1dg 。<span class="em">1</span><span class="em">2</span><span class="em">3</span>