SharedPreferencesに保存するためにAndroidデータの暗号化を行っています。GCMParameterSpec は、私がAES/GCM/NoPadding
暗号化に使用している API 19 で Android に導入されました。これは私がそれを実装している方法です:
Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
c.init(Cipher.ENCRYPT_MODE, getSecretKey(context),new GCMParameterSpec(128,Base64.decode(myGeneratedIV, Base64.DEFAULT)));
私の問題は、Android 4.4.2 (API 19) で上記のエラーがスローされることですが、API 21 からは機能します。
例外について、Android ドキュメントから:
指定されたアルゴリズム パラメータがこの暗号に不適切である場合、またはこの暗号がアルゴリズム パラメータを必要とし、params が null である場合、または指定されたアルゴリズム パラメータが法的な制限を超える暗号強度を暗示している場合 (構成された管轄ポリシー ファイルから決定)。
私の質問は次のとおりです。この動作には特定の理由がありますか? init
Cipherのメソッドがパラメーターを識別しないのはなぜですか?
特定の IV を指定せずに暗号化を試みました。
c.init(Cipher.ENCRYPT_MODE, getSecretKey(context));
そして、同じ方法で復号化しようとすると:
c.init(Cipher.DECRYPT_MODE, getSecretKey(context));
GCMParameterSpec
復号化には a が必要であるという同じ例外 (InvalidAlgorithmParameterException) をスローします。
GCMParameterSpec
復号化のみを指定しようとしましたが、不明なパラメーターの型の例外が発生します。
どんな助けでも大歓迎です