线程"main" java.security.InvalidKey异常中的异常:非法的密钥大小。键的字符长度为 44



线程"main"java.security.InvalidKeyException中的异常:以下代码的密钥大小非法

密钥的字符长度为44。我试过用字符长度24来加密。请帮助解决此问题。


public static void main(String args[]) throws Exception {
String plainText = "Hello world!";
String encryptionKeyBase64 = "DWIzFkO22qfVMgx2fIsxOXnwz10pRuZfFJBvf4RS3eY=";
System.out.println(encryptionKeyBase64.length());
String ivBase64 = "AcynMwikMkW4c7+mHtwtfw==";
EncDec encDec = new EncDec();
String cipherText = encDec.encrypt(plainText, encryptionKeyBase64, ivBase64);
}
public String encrypt(String plainText, String keyBase64, String ivBase64) throws Exception
{
byte[] plainTextArray = plainText.getBytes(StandardCharsets.UTF_8);
byte[] keyArray = DatatypeConverter.parseBase64Binary(keyBase64);
byte[] iv = DatatypeConverter.parseBase64Binary(ivBase64);
SecretKeySpec secretKey = new SecretKeySpec(keyArray, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");   
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));
return new String(DatatypeConverter.printBase64Binary(cipher.doFinal(plainTextArray)));
}
public String decrypt(String messageBase64, String keyBase64, String ivBase64) throws Exception {
byte[] messageArray = DatatypeConverter.parseBase64Binary(messageBase64);
byte[] keyArray = DatatypeConverter.parseBase64Binary(keyBase64);
byte[] iv = DatatypeConverter.parseBase64Binary(ivBase64);
SecretKey secretKey = new SecretKeySpec(keyArray, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
return new String(cipher.doFinal(messageArray));
}
}```

使用"AES"作为加密方案时,SecretKeySpec输入中的密钥长度必须为16、24或32字节。

因此,您应该检查byte[]keyArray的长度,而不是String"encryptionKeyBase64"的长度,并确保其长度为16/24/32字节。

您可以添加行

System.out.println("keyArray.length: " + 
DatatypeConverter.parseBase64Binary(encryptionKeyBase64).length);

在加密/解密方法中使用它之前。

Btw初始化向量"iv"的长度必须为16字节(固定,与密钥长度无关(。你可以用很容易地检查

System.out.println("iv.length:       " + DatatypeConverter.parseBase64Binary(ivBase64).length);

最新更新