Fehler nach Passworteingabe

Hallo,
nach einem Update heute auf Version 0.27.6 erscheint nun immer nach der Passworteingabe “javax.crypto.BadPaddingException: Given final block not properly padded”.
Wie lässt sich das wieder beseitigen?

Ich hatte das Laden/Speichern überarbeitet und hatte das Abfangen dieses Fehlers explizit drin behalten.
Da scheint aber noch etwas schief zu laufen.

Hast Du einen Stacktrace dazu, damit man die genaue Stelle sieht?

@sebasbaumh: Hier ist ein StackTrace gepostet: https://www.wertpapier-forum.de/topic/38306-portfolio-performance-mein-neues-programm/?page=111#comment-1108400

Ja, ist aber nahezu identisch zum geposteten Link von AndreasB (an einigen Stellen steht bei mir Unknown Source statt der entsprechenden Zeile):

Mon Oct 02 17:19:36 CEST 2017
javax.crypto.BadPaddingException: Given final block not properly padded
java.io.IOException: javax.crypto.BadPaddingException: Given final block not properly padded
at javax.crypto.CipherInputStream.close(CipherInputStream.java:321)
at java.io.PushbackInputStream.close(Unknown Source)
at java.util.zip.InflaterInputStream.close(Unknown Source)
at java.util.zip.ZipInputStream.close(Unknown Source)
at name.abuchen.portfolio.model.ClientFactory$Decryptor.load(ClientFactory.java:257)
at name.abuchen.portfolio.model.ClientFactory.load(ClientFactory.java:390)
at name.abuchen.portfolio.ui.LoadClientThread.run(LoadClientThread.java:42)

Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
at javax.crypto.Cipher.doFinal(Cipher.java:2004)
at javax.crypto.CipherInputStream.close(CipherInputStream.java:314)

... 6 more

Ansonsten findet bei mir folgendes Verwendung:
Win 7 Pro SP1 64Bit
Java SE 1.8 (Version 8 Update 31 [Build 1.8.0_31-b13]) x86

Danke Ihr Zwei, ich schau es mir an.

@AndreasB: Das müsste hoffentlich passen:

Das passt. Ich kann den Fehler reproduzieren - und mit Deinem Patch tritt er nicht mehr auf. Ich baue gleich eine neue Version.

Perfekt, danke Dir!
Dummerweise hatte das try-with-resources dafür gesorgt, dass der Stream vor dem catch weiter unten geschlossen wurde.
Java ist bei den Streams teilweise auch arg inkonsistent. Manchmal muss man erzwingen, dass es nicht weiter liest und manchmal verschluckt es sich, wenn man das Lesen unterbricht… :roll_eyes:

So, Version 0.27.7 ist auf dem Update Server.

Nach dem Update auf 0.27.7 tritt der Fehler bei mir nun auch auf. Windows 10

Mon Oct 02 20:32:37 CEST 2017
javax.crypto.BadPaddingException: Given final block not properly padded

java.io.IOException: javax.crypto.BadPaddingException: Given final block not properly padded

at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:121)

at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)

at javax.crypto.CipherInputStream.read(CipherInputStream.java:215)

at name.abuchen.portfolio.model.ClientFactory$Decryptor.readStreamUntilEnd(ClientFactory.java:217)

at name.abuchen.portfolio.model.ClientFactory$Decryptor.load(ClientFactory.java:278)

at name.abuchen.portfolio.model.ClientFactory.load(ClientFactory.java:400)

at name.abuchen.portfolio.ui.LoadClientThread.run(LoadClientThread.java:42)

Caused by: javax.crypto.BadPaddingException: Given final block not properly padded

at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:989)

at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)

at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)

at javax.crypto.Cipher.doFinal(Cipher.java:2048)

at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:118)

... 6 more

:grimacing: :face_with_symbols_over_mouth:

Kannst Du mir mal sagen welche Java Version Du installiert hast?

@sebasbaumh Ich glaube ich reverte mal zu der ursprünglichen Version zurück und dann schauen wir offline woran das wohl liegen mag.

Version 8 Update 141

Ich habe gerade das Update auf 0.27.7 erhalten und bekomme jetzt diesen Fehler. Vorher nutzte ich die 0.27.5. Hier ist der Stacktrace:

Mon Oct 02 20:31:31 CEST 2017
javax.crypto.BadPaddingException: Given final block not properly padded

java.io.IOException: javax.crypto.BadPaddingException: Given final block not properly padded
at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:121)
at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)
at javax.crypto.CipherInputStream.read(CipherInputStream.java:215)
at name.abuchen.portfolio.model.ClientFactory$Decryptor.readStreamUntilEnd(ClientFactory.java:217)
at name.abuchen.portfolio.model.ClientFactory$Decryptor.load(ClientFactory.java:278)
at name.abuchen.portfolio.model.ClientFactory.load(ClientFactory.java:400)
at name.abuchen.portfolio.ui.LoadClientThread.run(LoadClientThread.java:42)

Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:989)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at javax.crypto.Cipher.doFinal(Cipher.java:2048)
at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:118)
… 6 more

Windows 10, Java 1.8.0_145

@cs42 @Waldschrat Ich habe gerade Version 0.27.8 hochgeladen - könnt Ihr noch mal probieren?

Geht wieder. Merci…

:sweat:

Danke für die Rückmeldung. Ich lass es für heute sein… :smirk:

Danke @AndreasB. Ich schau mir das in Ruhe nochmal an.

Für mich sieht das sogar so aus, als ob er schon alles liest, aber dann irgendwann beim Schluss nur das Padding nicht passt.
Eventuell liegt es an verschiedenen Implementierungen in den JDKs oder vielleicht ist bei der Datei ein Unterschied zwischen der gespeicherten und der aktuellen Fassung. Mein Kurztest mit einer neu erzeugten Beispieldatei hatte das Problem nicht gezeigt, da passen die Implementierungen aber auch auf jeden Fall zusammen.
Am liebsten wäre es mir, wenn ich wirklich nur diese Exception abfange und nicht generell IOException - denn die könnte ja auch von anderen Fehlern stammen.

Dein rasanter Support ist einfach überragend! Habe den Fehler gerade auch bemerkt, aber mit der schnellen neuen Version 0.27.8 klappt der Aufruf der passwortgeschützten Datei ohne Probleme! Nochmals vielen Dank für das absolut tolle Programm! Habe es einem Profi (Vermögensverwalter) gezeigt und der war schlichtweg von den Socken von den vielen detaillierten Analysen!

1 Like

Es liegt auf jeden Fall an JDK Versionen. Ich konnte den ursprünglichen Fehler mit 1.8.25 (Oracle, 64bit, macOS) nachstellen, nicht aber mit 1.8.144 (was ich aktuell nutze). Und es muss auch was mit der Datei selbst zu tun haben - es tritt nicht bei allen verschlüsselten Dateien auf. Der Folgefehler ist bei mir nicht aufgetreten - ich habe es allerdings auch nicht mit verschiedenen JDKs ausprobiert.