본문 바로가기

Programming/에러 정리

[Android] IV required when decrypting.

발생한 에러

 -  java.security.InvalidKeyException: IV required when decrypting. Use IvParameterSpec or AlgorithmParameters to provide it.

(해독 시 IV 가 필요합니다. IvParameterSpec 또는 AlgorithmParameters를 사용하여 제공하십시오.)

 

발생 원인

 - Decrypt 시에는 iv값이 필요한데 해당 값이 없어 발생하는 문제

 

해결방법

 1. Exception 에러메시지에서 이야기하는 것과 같이 IvParameterSpec 이나 AlgorithmParameters 를 추가

 2. iv값 및 ivspec 추가후 cipher.init 시에 ivspec 매개변수 추가 

 3. Encrypt 시에도 iv값이 추가되어야 함

 

예시
byte[] iv = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
IvParameterSpec ivspec = new IvParameterSpec(iv);

KeyStore.SecretKeyEntry secretKeyEntry = (KeyStore.SecretKeyEntry) keyStore.getEntry(ALIAS,null);
SecretKey secretKey = secretKeyEntry.getSecretKey();

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);