I am getting java.security.InvalidKeyException: Illegal key size or default parameters , I have fallow all the required step ,Installed Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files. Also I have Gone through these Threads
Java.security.InvalidKeyException: Illegal key size or default parameters error
Java Security: Illegal key size or default parameters?
But I am still stuck and getting java.security.InvalidKeyException: Illegal key size or default parameters ,
Below is My Code : AESKeyGenerator.java
public class AESKeyGenerator {
private Cipher mCipher;
public AESKeyGenerator()
{
// default constructor
}
public byte[] generate_k(String dhkey, String toEncrypt)
{
byte[] retVal;
try { // Set up the Cipher class of Android to use AES to generate keys
byte[] iv = new byte[16];
for (int i = 0; i < iv.length; i++)
iv[i] = new Byte("0").byteValue();
IvParameterSpec ivspec = new IvParameterSpec(iv);
mCipher = Cipher.getInstance("AES");
// Set up key to use in algorithm
MessageDigest hasher = MessageDigest.getInstance("SHA-256"); // Initialize object that will hash my key.
byte[] key256 = hasher.digest(dhkey.getBytes()); // Hash the key to 256 bits using SHA
SecretKeySpec K = new SecretKeySpec(key256, "AES");
System.out.println("SecretKeySpec : "+K + " key256 "+key256);
mCipher.init(Cipher.ENCRYPT_MODE, K, ivspec);
// Encrypt the parameter toEncrypt
retVal = mCipher.doFinal(toEncrypt.getBytes());
return retVal;
}
catch (Exception e) {
e.printStackTrace();
System.err.println("Could not create and initialize object Cipher.");
}
return null;
}
public byte[] generate_r(byte[] sharedKey, String toEncrypt)
{
byte[] retVal;
try {
/*byte[] iv = new byte[16];
for (int i = 0; i < iv.length; i++)
iv[i] = new Byte("0").byteValue();
IvParameterSpec ivspec = new IvParameterSpec(iv);*/
// Set up the Cipher class of Android to use AES to generate keys
mCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// Set up key to use in algorithm
MessageDigest hasher = MessageDigest.getInstance("SHA-256"); // Initialize object that will hash my key.
byte[] key256 = hasher.digest(sharedKey); // Hash the key to 256 bits using SHA 256
SecretKeySpec K = new SecretKeySpec(key256, "AES");
mCipher.init(Cipher.ENCRYPT_MODE, K);
// Encrypt the parameter toEncrypt
System.out.println("toEncrypt AES: "+ toEncrypt);
retVal = mCipher.doFinal(toEncrypt.getBytes());
return retVal;
}
catch (Exception e) {
e.printStackTrace();
System.err.println("exception: "+ e.toString());
System.err.println("Could not create and initialize object Cipher.");
}
return null;
}
}
I am getting fallowing error:
java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1010)
at javax.crypto.Cipher.implInit(Cipher.java:785)
at javax.crypto.Cipher.chooseProvider(Cipher.java:848)
at javax.crypto.Cipher.init(Cipher.java:1212)
at javax.crypto.Cipher.init(Cipher.java:1152)
at AESKeyGenerator.generate_r(AESKeyGenerator.java:74)
at DetectionServer.storeGridInformation(DetectionServer.java:309)
at DetectionServer.doPost(DetectionServer.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
exception: java.security.InvalidKeyException: Illegal key size or default parameters
Could not create and initialize object Cipher.
I check with the standard code which is also same as this. I think there is some issue with configuration or missing library.
I can not reproduce this - I have installed the current Unlimited Strength Jurisdiction Policy Files and I have used the following main method to test:
public static void main(String[] args) throws UnsupportedEncodingException {
AESKeyGenerator aes = new AESKeyGenerator();
String sharedKey = "Bar12345Bar12345Bar12345Bar12345";
aes.generate_r(sharedKey.getBytes("US-ASCII"), "Hello World");
}
Prior to installing the policy files, I got the same exception as you.
One thing I did wrong first is that I installed the policy files into Program files/jdk_1.7.0_13/jre/lib/security
, but the JRE which was used is located in Program files/jre7
- so make sure that you have installed the policy files in the proper location and check with a simple standalone java application using the main method above if it works.
i got the same problem but it works fine now,,you have to go to this site and download http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html download(UnlimitedJCEPolicyJDK7.zip) then extract it and copy the two jar file to your jdk location path and restart your project. that's it
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With