Sto seguendo l'esempio di Android fornito da Google, ConfirmCredential, ma mostra solo come crittografare i dati. Quando provo a decifrarlo ottengo un'eccezione:Problema durante l'utilizzo dell'impronta digitale Android: richiesta IV durante la decrittografia. Utilizza IvParameterSpec o AlgorithmParameters per fornirlo
java.security.InvalidKeyException: IV required when decrypting. Use IvParameterSpec or AlgorithmParameters to provide it.
Io uso il seguente codice:
String transforation = KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7;
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
SecretKey secretKey = (SecretKey) keyStore.getKey(KEY_NAME, null);
// encrypt
Cipher cipher = Cipher.getInstance(transforation);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
String encriptedPassword = cipher.doFinal("Some Password".getBytes("UTF-8"));
// decrypt
cipher = Cipher.getInstance(transforation);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
String password = new String(cipher.doFinal(encriptedPassword), "UTF-8"));
viene generata l'eccezione alla riga:
cipher.init(Cipher.DECRYPT_MODE, secretKey);
Qualche idea su quello che è il modo corretto di fare la decrittazione in questo caso?
Consulta http://stackoverflow.com/questions/6669181/why-does-my-aes-encryption-throws-an-invalidkeyexception e verifica se l'utilizzo di IvParameterSpec è utile. – ditkin
Cancella duplicato IMHO. – JimmyB
@ditkin Avevo già provato ad aggiungere IV, ma risultava con eccezione: java.security.InvalidAlgorithmParameterException: IV fornito dal chiamante non consentito durante la crittografia. – Zlatko