2017-10-28 14 views
0

新しいJDK 9リリースを使用してこのクラスを作成しました。Java - AES 256はJDK 7とJDK 9では動作しますが、JDK 8では動作しません

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 

このエラーはなぜ発生しますか? AES-256はJava 8ではサポートされていませんか?

+0

関連性はないかもしれませんが、暗号のすべての側面を常に定義する必要があります。 「AES」だけではありません。また、ECBモードを使用しないでください。代わりに "AES/CBC/PKCS5Padding"を使用してください。 –

答えて

1

それがサポートされている、あなたは自分のJava 8 JRE(link)を更新する必要がある、またはJCEポリシーファイル(link)が含ま 強力な暗号化は、それが最新のディストリビューションでは、デフォルトでJREに含まれていませんでした。あなたのケースでJava 7で動作する理由は、おそらく7u171以降です。これが異なるバージョンにバックポートされた時期については、 JDK-8170157を参照してください。

関連する問題