title: java.security.invalidkeyexception illegal key size or default parameters
body: <p>Please read full question before mark it as duplicate or down vote.
  I need to add AES 256 encryption in my project. so according <a href="https://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters">here</a> have added security jars in my jre and jdk's lib security folder. now if I run code using main method it is working but if I deploy it in tomcat. it is throwing me error</p>
  
  <pre><code>java.security.InvalidKeyException: Illegal key size or default parameters
          at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1026)
          at javax.crypto.Cipher.implInit(Cipher.java:801)
          at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
          at javax.crypto.Cipher.init(Cipher.java:1249)
          at javax.crypto.Cipher.init(Cipher.java:1186)
          at com.infy.encrypt.Encryption.encrypt(Encryption.java:36)
          at com.infy.service.UserServiceImpl.addUser(UserServiceImpl.java:24)
          at com.infy.controller.UserController.addUser(UserController.java:44)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
          at java.lang.reflect.Method.invoke(Unknown Source)
          at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
          at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
          at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
  </code></pre>
  
  <p>I think my tomcat is not reading updated policy files. aI tried by killing jvm proccesses but no luck.</p>
  
  <p>below is my encryption code</p>
  
  <pre><code> public String encrypt(String word) throws Exception {
  
          byte[] ivBytes;
          String password="Hello"; 
      /*you can give whatever you want for password. This is for testing purpose*/
  
          SecureRandom random = new SecureRandom();
          byte bytes[] = new byte[20];
          random.nextBytes(bytes);
          byte[] saltBytes = bytes;
  
          // Derive the key
         SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
  
          PBEKeySpec spec = new PBEKeySpec(password.toCharArray(),saltBytes,65556,256);
  
           SecretKey secretKey = factory.generateSecret(spec);
          SecretKeySpec secret = new SecretKeySpec(secretKey.getEncoded(), "AES");
  
           //encrypting the word
  
           Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
           cipher.init(Cipher.ENCRYPT_MODE, secret);
           AlgorithmParameters params = cipher.getParameters();
           ivBytes =   params.getParameterSpec(IvParameterSpec.class).getIV();
  
           byte[] encryptedTextBytes =  cipher.doFinal(word.getBytes("UTF-8"));
  
           //prepend salt and vi
  
            byte[] buffer = new byte[saltBytes.length + ivBytes.length + encryptedTextBytes.length];
  
            System.arraycopy(saltBytes, 0, buffer, 0, saltBytes.length);
            System.arraycopy(ivBytes, 0, buffer, saltBytes.length, ivBytes.length);
  
             System.arraycopy(encryptedTextBytes, 0, buffer, saltBytes.length + ivBytes.length, encryptedTextBytes.length);
  
             return new Base64().encodeToString(buffer);
  
          }
  </code></pre>
  
  <p>below is the result for Test method</p>
  
  <pre><code>public static void main(String[] args) throws Exception {
  
          Encryption en=new Encryption();
          String encryptedWord=en.encrypt("Test"); 
          System.out.println("Encrypted word is : " + encryptedWord);
          Decryption de =new Decryption();
          System.out.println("Decrypted word is : " +    de.decrypt(encryptedWord));  
      }
  </code></pre>
  
  <p>output</p>
  
  <pre><code>Encrypted word is : o73KvJpuI/QdJlswEsBqf/Cz0PDdUdX0emADyTMxqVeHDP1QSkH+YR0HlWAMb+dNGDjy3w==
  </code></pre>
  
  <p>But if I hit same thing by deploying in tomcat it is not working
  below is my controller class</p>
  
  <pre><code>@RequestMapping(value = "/register/add", method = RequestMethod.POST,produces=MediaType.APPLICATION_JSON_VALUE,consumes=MediaType.APPLICATION_JSON_VALUE)       
          public @ResponseBody UserMVC addUser(@RequestBody UserMVC p) {
  System.out.println("inside controller");
  /*          if (p.getId() == 0) {
                  // new user, add it
                  this.userService.addUser(p);
              } else {
                  // existing user, call update
                  this.userService.updateUser(p);
              }*/
              User user=new User();
              user.setFirstname(p.getFirstName());
              user.setLastname(p.getLastName());
              user.setPassword(p.getPassword());
              user.setUsername(p.getUserName());
              this.userService.addUser(user);
              return p;
  
          }
  </code></pre>
  
  <p>and adduser metthod of dao</p>
  
  <pre><code>public void addUser(User p) {
          try {
              Encryption en=new Encryption();
              p.setPassword(en.encrypt(p.getPassword()));
              System.out.println("password:"+p.getPassword());
              this.userDao.addUser(p);
          } catch (Exception e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
  </code></pre>