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).

  • Kann keine Aktionsleiste in Fragmentklasse bekommen
  • Android Game Framework
  • Gibt es ein Android-Spiel-Framework bereit zu verwenden
  • Was ist der einfachste und robusteste Weg, um den aktuellen Standort des Benutzers auf Android zu bekommen?
  • So erzwingt Eclipse, eine App neu zu starten, die sich nicht geändert hat
  • Scale Bild halten seine Seitenverhältnis im Hintergrund ziehbar
  • 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.

  • OnActivityResult für Fragment
  • Android machen Telefonnummern anklickbar, autodetekt
  • Wie können wir Anrufe und SMS in Android simulieren?
  • Ist es möglich, java fx auf einem Android-Handy zu installieren?
  • Java.lang.RuntimeException: Die Aktivität kann nicht mit java.lang.IllegalArgumentException fortgesetzt werden
  • Android ListView padding für Inhalte ohne bewegende ListView Höhe?
  • 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.