加密时出错:java.security.InvalidKeyException:无效AES密钥长度:11字节
我在加密时遇到以下代码的异常。 创建的密钥为“[B@29ee9faa". “加密时出错:java.security.InvalidKeyException:无效AES密钥长度:11字节” 此外,我已经在我的jre/lib/security中更新了我的本地策略和美国导出策略加密时出错:java.security.InvalidKeyException:无效AES密钥长度:11字节,java,encryption,Java,Encryption,我在加密时遇到以下代码的异常。 创建的密钥为“[B@29ee9faa". “加密时出错:java.security.InvalidKeyException:无效AES密钥长度:11字节” 此外,我已经在我的jre/lib/security中更新了我的本地策略和美国导出策略 public static String generateKey(String eisId) { String uuidKey = null; try { KeyGenerator
public static String generateKey(String eisId)
{
String uuidKey = null;
try {
KeyGenerator gen = KeyGenerator.getInstance("AES");
gen.init(128); /* 128-bit AES */
SecretKey secret = gen.generateKey();
uuidKey = secret.getEncoded().toString();
System.out.println("uuidKey : "+uuidKey);
// Store in DB
// **********************
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return uuidKey;
}
public static SealedObject encryptData(String eisId, SecurityDomainDTO sDObj)
{
try
{
String secret = generateKey(eisId);
SecretKeySpec aesKey = new SecretKeySpec(secret.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
SealedObject so = new SealedObject(sDObj, cipher);
return so;
}
catch (Exception e)
{
System.out.println("Error while encrypting: " + e.toString());
}
return null;
}
"[B@29ee9faa“字符串是一条重要线索。这是在字节[]
上调用toString()
时得到的。它不表示字节数组的内容。相反,它表示内部类型名(“[B”)和对象的标识代码。”
这就是错误:
uuidKey = secret.getEncoded().toString();
这不是格式化字节数组内容的正确方法
我建议您使用Base64
类;例如
Base64.Encoder encoder = Base64.getEncoder();
String encoded = encoder.encode(bytes);
...
Base64.Decoder decoder = Base64.getDecoder();
byte[] bytes = decoder.decode(encoded);
toString()
不是这样工作的,无论如何,将字节[]转换为字符串在这里是毫无意义的。这样做会导致java.security.InvalidKeyException:参数丢失“我建议你考虑一下我所说的……关于解码。如果这没有帮助,请提出一个新问题,其中包含更新的代码。当然,我认为这应该是一个不同的问题。