How to fix Invalid AES key length?

后端 未结 4 729
我在风中等你
我在风中等你 2020-12-12 22:39

I am working on a text encryption and decryption project (following Struts 2)

Whenever I enter the password and the plain text I get a Invalid AES K

4条回答
  •  萌比男神i
    2020-12-12 23:04

    You can use this code, this code is for AES-256-CBC or you can use it for other AES encryption. Key length error mainly comes in 256-bit encryption.

    This error comes due to the encoding or charset name we pass in the SecretKeySpec. Suppose, in my case, I have a key length of 44, but I am not able to encrypt my text using this long key; Java throws me an error of invalid key length. Therefore I pass my key as a BASE64 in the function, and it converts my 44 length key in the 32 bytes, which is must for the 256-bit encryption.

    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.MessageDigest;
    import java.security.Security;
    import java.util.Base64;
    
    public class Encrypt {
    
        static byte [] arr = {1,2,3,4,5,6,7,8,9};
    
        // static byte [] arr = new byte[16];
    
          public static void main(String...args) {
            try {
             //   System.out.println(Cipher.getMaxAllowedKeyLength("AES"));
                Base64.Decoder decoder = Base64.getDecoder();
                // static byte [] arr = new byte[16];
                Security.setProperty("crypto.policy", "unlimited");
                String key = "Your key";
           //     System.out.println("-------" + key);
    
                String value = "Hey, i am adnan";
                String IV = "0123456789abcdef";
           //     System.out.println(value);
                // log.info(value);
              IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
                //    IvParameterSpec iv = new IvParameterSpec(arr);
    
            //    System.out.println(key);
                SecretKeySpec skeySpec = new SecretKeySpec(decoder.decode(key), "AES");
             //   System.out.println(skeySpec);
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            //    System.out.println("ffffdffffdffffd"+IV);
                cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
           //     System.out.println(cipher.getIV());
    
                byte[] encrypted = cipher.doFinal(value.getBytes());
                String encryptedString = Base64.getEncoder().encodeToString(encrypted);
    
                System.out.println("encrypted string,,,,,,,,,,,,,,,,,,,: " + encryptedString);
                // vars.put("input-1",encryptedString);
                //  log.info("beanshell");
            }catch (Exception e){
                System.out.println(e.getMessage());
            }
        }
    }
    

提交回复
热议问题