Java 如何生成256位AES密钥

Java 如何生成256位AES密钥,java,encryption,aes,Java,Encryption,Aes,为了生成256位的AES密钥,我编写了以下代码: KeyGenerator keyGen; try { keyGen = KeyGenerator.getInstance("AES"); keyGen.init(256); SecretKey secretKey = keyGen.generateKey(); return secretKey; } catch (Exception e) { e.printStackTrace(); return null; }

为了生成256位的AES密钥,我编写了以下代码:

KeyGenerator keyGen;

try {
  keyGen = KeyGenerator.getInstance("AES");
  keyGen.init(256);
  SecretKey secretKey = keyGen.generateKey();
  return secretKey;    
}
catch (Exception e) {
  e.printStackTrace();
  return null;
}
我的加密方法是:

  private byte[] aes256Encode(SecretKey key, IvParameterSpec iv, String message) throws InvalidKeyException,
      InvalidAlgorithmParameterException,
      NoSuchAlgorithmException, NoSuchPaddingException,
      IllegalBlockSizeException, BadPaddingException 
  {
    Cipher cipher = Cipher.getInstance("AES/CFB/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key, iv);
    byte[] encrypted = cipher.doFinal(message.getBytes());
    return encrypted;
  }
  private IvParameterSpec generateAESIV() {
    // build the initialization vector (randomly).
    SecureRandom random = new SecureRandom();
    byte iv[] = new byte[16];//generate random 16 byte long
    random.nextBytes(iv);
    IvParameterSpec ivspec = new IvParameterSpec(iv);
    return ivspec;
  }
IV生成方法为:

  private byte[] aes256Encode(SecretKey key, IvParameterSpec iv, String message) throws InvalidKeyException,
      InvalidAlgorithmParameterException,
      NoSuchAlgorithmException, NoSuchPaddingException,
      IllegalBlockSizeException, BadPaddingException 
  {
    Cipher cipher = Cipher.getInstance("AES/CFB/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key, iv);
    byte[] encrypted = cipher.doFinal(message.getBytes());
    return encrypted;
  }
  private IvParameterSpec generateAESIV() {
    // build the initialization vector (randomly).
    SecureRandom random = new SecureRandom();
    byte iv[] = new byte[16];//generate random 16 byte long
    random.nextBytes(iv);
    IvParameterSpec ivspec = new IvParameterSpec(iv);
    return ivspec;
  }
但在加密时,它会抛出以下错误:

Exception in thread "main" java.security.InvalidKeyException: Illegal key size
    at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
    at javax.crypto.Cipher.implInit(Cipher.java:805)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
    at javax.crypto.Cipher.init(Cipher.java:1396)
    at javax.crypto.Cipher.init(Cipher.java:1327)

有人能指出我在这里犯的错误吗?

你更新了JCE jars吗

Java附带默认的128位。看一看,让我知道更改这行

keyGen.init(256)

keyGen.init(128)

默认情况下,Java只支持128位加密

编辑:
如果您需要使用大于128位的密钥加密内容,则必须使用。

下次搜索异常消息时,请在发布重复问题之前使用,好吗?谢谢@Tom的建议。这对我有用!谢谢@Aravind R.。这对我很有效!