Sto tentando di crittografare/decodificare una stringa in Java. Nessun problema riguardante la crittografia quindi memorizzato in una tabella sqlite. Ma ottengo sempre lo stesso errore nel tentativo di decifrare:Errore di decodifica in java
"java.security.InvalidKeyException: no IV set, quando si aspettava"
Ecco il mio frammento di codice:
public String encrypt(String password){
try
{
String key = "mysecretpassword";
SecretKeySpec keySpec = null;
keySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
return new String(cipher.doFinal(password.getBytes()));
}
catch (Exception e)
{
return null;
}
}
public String decrypt(String password){
try
{
String key = "mysecretpassword";
SecretKeySpec keySpec = null;
keySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE,keySpec);
return new String(cipher.doFinal(password.getBytes()));
}
catch (Exception e)
{
System.out.println(e);
return null;
}
}
Che cosa sono io fare male?
Avendo lo stesso problema, non capisco, perché funziona su encrypt e fallisce in decrittografia? a meno che, non impostando una IV in crittografia, ne venga generato uno casuale? – scottyab
Solo per seguire il mio commento precedente. Sì, è necessario impostare una IV simile a come @Udo ha mostrato di seguito. – scottyab
Possibile duplicato di [Decrittografia errore: "nessun iv impostato quando previsto"] (http://stackoverflow.com/questions/11503157/decrypting-error-no-iv-set-when-one-expected) – rds