Próbuję zaszyfrować/odszyfrować ciąg w Javie. Nie ma problemu z szyfrowaniem, a następnie przechowywane w tabeli sqlite. Ale zawsze ten sam błąd próbując go odszyfrować:Błąd odszyfrowywania w java
„java.security.InvalidKeyException: brak IV set, gdy jeden z oczekiwaniami”
Tu jest mój urywek kodu:
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;
}
}
Czym jestem robić źle?
Masz ten sam problem, nie rozumiem, dlaczego działa on przy szyfrowaniu i nie powiedzie się podczas odszyfrowywania? chyba że nie ustawiając IV w szyfrowaniu, generowany jest przypadek? – scottyab
Tylko po to, aby kontynuować mój poprzedni komentarz. Tak, musisz ustawić IV podobny do pokazanego poniżej @Udo. – scottyab
Możliwy duplikat [Błąd deszyfrowania: "nie ustawiono iv, gdy oczekiwano"] (http://stackoverflow.com/questions/11503157/decrypting-error-no-iv-set-when-one-expected) – rds