Java-AES 256适用于JDK 7和JDK 9,但不适用于JDK 8

时间:2017-10-28 11:27:10

标签: java encryption

我使用新的JDK 9版本编写了这个类。

public class Encrypters {
    public static byte[] AESEncrypt(Key key, byte[] data) throws GeneralSecurityException {
        Cipher cipher=Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);

        byte[] encryptedData=cipher.doFinal(data);
        return encryptedData;
    }
}

我也写了这个助手类

public class Hashes {
    public static byte[] sha256Hash(byte[] input) {
        return hash(input, "SHA-256");
    }

    private static byte[] hash(byte[] input, String algorithm) {
        MessageDigest md=null;
        try {
            md=MessageDigest.getInstance(algorithm);
        } 
        catch (NoSuchAlgorithmException e) {}
        return md.digest(input);
    }
}

这是加密字符串的用法:

String password=...;
String data=...;
Key key=new SecretKeySpec(Hashes.sha256Hash(password.getBytes(), "AES"));
Encrypters.AESEncrypt(key, data.getBytes());

此代码与JDK 9和JDK 7一起运行,但不与JDK 8一起运行。 如果我尝试使用JDK 8运行,我会收到此错误:

java.security.InvalidKeyException: Illegal key size or default parameters

为什么会出现此错误? Java 8不支持AES-256吗?

1 个答案:

答案 0 :(得分:2)

支持,您只需更新Java 8 JRE(link),或包含JCE策略文件(link) 在最新的发行版中,默认情况下,强加密从未包含在JRE中。在你的情况下它适用于Java 7的原因可能是因为它是7u171或更高版本。看到 JDK-8170157有关何时将其移植到不同版本的详细信息。