我正在使用静态方法创建一个类来使用javax.crypto加密和解密消息。我有2个静态方法,使用ecipher和dcipher来做他们所做的事情我需要初始化一些变量(也是静态的)。但是当我尝试使用它时,我使用我给ecipher.init(...)的参数得到InvalidKeyException。我找不到原因。这是代码:
private static byte[] raw = {-31, 17, 7, -34, 59, -61, -60, -16,
26, 87, -35, 114, 0, -53, 99, -116,
-82, -122, 68, 47, -3, -17, -21, -82,
-50, 126, 119, -106, -119, -5, 109, 98};
private static SecretKeySpec skeySpec;
private static Cipher ecipher;
private static Cipher dcipher;
static {
try {
skeySpec = new SecretKeySpec(raw, "AES");
// Instantiate the cipher
ecipher = Cipher.getInstance("AES");
dcipher = Cipher.getInstance("AES");
ecipher.init(Cipher.ENCRYPT_MODE, skeySpec);
dcipher.init(Cipher.DECRYPT_MODE, skeySpec);
} catch (NoSuchAlgorithmException e) {
throw new UnhandledException("No existe el algoritmo deseado", e);
} catch (NoSuchPaddingException e) {
throw new UnhandledException("No existe el padding deseado", e);
} catch (InvalidKeyException e) {
throw new UnhandledException("Clave invalida", e);
}
}
答案 0 :(得分:4)
AES-256(和AES-192)要求为JRE安装无限强度管辖权政策文件(最后一次下载http://java.sun.com/javase/downloads/index.jsp)。在您的类中尝试使用192或256位密钥时,没有此支持将导致InvalidKeyException。
JCA Reference Guide for Java 6中记录了AES没有无限强度的最大允许密钥大小,这恰好是128位。
答案 1 :(得分:1)