Entschlüsselungsfehler: "kein iv gesetzt, wenn man erwartet"

Ich bin fast neu für die Verschlüsselung.

Ich versuche, ein Array von Bytes zu entschlüsseln, und wenn ich die IV verstelle, bekomme ich eine Ausnahme: InvalidAlgorithmParameterException (kein iv Set, wenn man erwartet).

Hier ist mein Code ( iv ist ein Array von 16 Bytes, die nicht null ist und die bei der Verschlüsselung verwendeten Werte hat):

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, encriptionKey,new IvParameterSpec(iv)); 

Wenn ich das IV nicht annehme, wird die Chiffre initialisiert ok:

 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, encriptionKey); 

Ich habe versucht, eine Antwort zu finden, die ich eine Implementierung von JCEStreamCipher ( hier ) gefunden habe, die möglicherweise nicht mit der Version übereinstimmt, die ich benutze, aber irgendeinen Code hat, der mich dazu bringt, dass ich es nicht richtig verstehe.

Hier ist der Code:

  if ((ivLength != 0) && !(param instanceof ParametersWithIV)) { SecureRandom ivRandom = random; if (ivRandom == null) { ivRandom = new SecureRandom(); } if ((opmode == Cipher.ENCRYPT_MODE) || (opmode == Cipher.WRAP_MODE)) { byte[] iv = new byte[ivLength]; ivRandom.nextBytes(iv); param = new ParametersWithIV(param, iv); ivParam = (ParametersWithIV)param; } else { throw new InvalidAlgorithmParameterException("no IV set when one expected"); } } 

Sieht aus wie ich kann keine IV bei der Entschlüsselung, aber es macht nicht zu viel Sinn für mich.

Jede Hilfe wird sehr geschätzt.

Vielen Dank, Richard.

  • Verschlüsseln mit Node.js Crypto Modul und entschlüsseln mit Java (in Android App)
  • Java-Äquivalent von .NET RSACryptoServiceProvider mit SHA-1
  • Verwenden von ECC Curve25519 zum Verschlüsseln / Entschlüsseln von Daten in Java
  • Bedeutung von "AES" cipher in Android?
  • So validieren Sie den Ursprung eines Web Service Invokation
  • Verschlüsselung & Entschlüsselung von Benutzernamen mit KeyStore in Android M & Ältere Version?
  • Entschlüsselungsfehler auf Android 4.4
  • Wie hash einen String in Android?
  • One Solution collect form web for “Entschlüsselungsfehler: "kein iv gesetzt, wenn man erwartet"”

    Gelöst

    Ich habe einen falschen SecretKey benutzt, nicht den, den du für AES schaffen kannst.

    Vorher hatte ich:

     KeySpec spec = new PBEKeySpec(password.toCharArray(), encryptionKeySalt, 12345,256); SecretKey encriptionKey = factory.generateSecret(spec); 

    Die einen JCEPBEKey schafft.

    Ich habe gefehlt :

     Key encriptionKey = new SecretKeySpec(encriptionKey.getEncoded(), "AES"); 

    Die einen passenden Schlüssel für AES schafft.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.