Cipher geht mal und mal nicht

Status
Nicht offen für weitere Antworten.

Eminent

Bekanntes Mitglied
Hi zusammen,

ich hab hier ein Problem das ich irgendwie nicht hin kriege.

Grundsätzlich will ich eigentlich String verschlüssen (mit Hilfe von Cipher), in Dateien schreiben und später beim Lesen wieder entschlüsseln. Leider funktioniert das nur irgendwie nicht beim entschlüsseln. Ich habe jetzt mal ne kleine Testanwendung gebastelt mit der sich das Problem nachstellen lässt, vielleicht seht ihr den Fehler ja gleich.

Also ich habe eine statische Klasse SKCrypto, die eigentlich nur einen Key generiert und und byte[] ver- und entschlüsseln kann:

Code:
public class SKCrypto {
   public static byte[] decrypt(final byte[] baToDecrypt) {
      try {
         Cipher cipher = Cipher.getInstance("DES");
         cipher.init(Cipher.DECRYPT_MODE, generateKey("DES"));
         byte[] b = cipher.doFinal(baToDecrypt);
         return b;
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;
   }

   public static byte[] encrypt(final byte[] baToEncrypt) {
      try {
         Cipher cipher = Cipher.getInstance("DES");
         cipher.init(Cipher.ENCRYPT_MODE, generateKey("DES"));
         byte[] b = cipher.doFinal(baToEncrypt);
         return b;
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;
   }

   private static SecretKey generateKey(final String sType) {
      byte[] b = { 
         (byte) 0x2A, 
         (byte) 0x2A, 
         (byte) 0x65, 
         (byte) 0x73,
         (byte) 0x4B, 
         (byte) 0x65, 
         (byte) 0x79, 
         (byte) 0x2A 
      };
      try {
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(sType);
         return keyFactory.generateSecret(new DESKeySpec(b));
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;
   }
}

In meiner Testklasse mache ich jetzt folgendes um mir die Umwandlungen etwas genauer anzusehen:

Code:
public class Test {
   public static void main(String[] args) {
      try {
         String s = "mein String";
         System.out.println("s                 : " + s);
         System.out.println("s byte[]          : " + s.getBytes());
         System.out.println("s byte[] encrypted: " + SKCrypto.encrypt(s.getBytes()));
         String n = new String(SKCrypto.encrypt(s.getBytes()));
         System.out.println("n                 : " + n);
         System.out.println("n byte[]          : " + n.getBytes());
         System.out.println("n byte[] decrypted: " + SKCrypto.decrypt(n.getBytes()));
         String f = new String(SKCrypto.decrypt(n.getBytes()));
         System.out.println("f                 : " + f);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

Leider funktioniert das Ganze hier für manche Strings, für andere wieder leider nicht. Als Beispiel "mein String" funktioniert und die Ausgaben kommen ohne Fehler. Genauso "Zeil" geht ebenfalls. Versuche ich es jedoch mit "Zeile" bekomme ich folgenden Fehler:

Code:
javax.crypto.BadPaddingException: Given final block not properly padded
	at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
	at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
	at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..)
	at javax.crypto.Cipher.doFinal(DashoA13*..)
	at resources.util.SKCrypto.decrypt(SKCrypto.java:34)
	at test.Test.main(Test.java:18)
javax.crypto.BadPaddingException: Given final block not properly padded
	at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
	at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
	at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..)
n byte[] decrypted: null
	at javax.crypto.Cipher.doFinal(DashoA13*..)
	at resources.util.SKCrypto.decrypt(SKCrypto.java:34)
	at test.Test.main(Test.java:19)

Habe ich vielleicht beim Generieren vom Key irgendwas falsch gemacht? Ich kenne mich an der Stelle leider nicht besonders gut aus. Das Genieriern des Keys habe ich mir aus Beispielen zusammengesucht.

Vielen Dank schon mal für eure Hilfe und eure Mühen.

Gruß
Stefan
 

Eminent

Bekanntes Mitglied
SlaterB hat gesagt.:
muss die Länge des Strings durch 4 teilbar sein?

Nein eigentlich nicht. Es funktioniert neben "mein String" z. B. auch "mein Strings" und "mein" alleine funktioniert nicht. Ist irgendwie schon komisch. :bahnhof:
 

Eminent

Bekanntes Mitglied
So ich hab das Problem jetzt gelöst. Nachdem die Strings beim entschlüssln immer Probleme gemacht haben, habe ich mein Vorgehen jetzt geändert.

Ich schreibe nicht den Inhalt verschlüsselt in die Datei sondern ich schreibe komplett eine verschlüsselte Datei.

Dazu wird temporär eine unverschlüsselte Datei geschrieben. Ist diese fertig lese ich die Datei ein und schreibe sie komplett verschlüsselt zurück. Die Tempdatei wird dann gelöscht.

Beim Lesen genauso nur anders herum. Datei lesen, unverschlüsselte Tempdatei schreiben und aus dieser lesen. Nach dem Lesen wird die Tempdatei dann wieder gelöscht.

Ich weiß ist nicht die sicherste Methode (wenn z. B beim Löschen der Tempdateien etwas schief geht). Aber für unsere Zecke reicht es (es soll eben einfach nicht einfach eine unverschlüsselte Datei mit den Inhalten in irgendwelchen Netzlaufwerken "rumstehen").

Vielen Dank trotzem. :D

Gruß
Stefan
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
M Verschlüsselung mit Cipher Allgemeine Java-Themen 5
M Verwendung der Cipher von gnu crypto (Serpent) Allgemeine Java-Themen 3
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
A Cipher Instantzierung Allgemeine Java-Themen 3
MQue Cipher Allgemeine Java-Themen 5
D Cipher Allgemeine Java-Themen 3
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
D Liste von möglichen Cipher Verschlüsselungsalgorithmen? Allgemeine Java-Themen 3
D Cipher(In)OutputStream Allgemeine Java-Themen 3
S Verschlüsselung mit Cipher Allgemeine Java-Themen 8
M Probleme mit Cipher: java.security.InvalidKeyException Allgemeine Java-Themen 1
HolyFUT Best Practice Wie geht man mit "schlechten" Projekten um? Allgemeine Java-Themen 7
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
F 2 JsonArray vergleichen, geht es auch einfacher ? Allgemeine Java-Themen 3
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
M Console geht nicht auf (Windows 10) Allgemeine Java-Themen 3
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
P Erste Schritte HauptFrame geht nicht Allgemeine Java-Themen 7
L Applet Applet zu JavaWebStart migrieren - simples sample geht nicht Allgemeine Java-Themen 2
KeVoZ_ Java Mail senden - geht nicht Allgemeine Java-Themen 4
K API - Wie geht das? Allgemeine Java-Themen 2
D Klassenübergreifender Befehl geht nicht Allgemeine Java-Themen 10
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
M JUnit Serverseitig? Wie geht sowas? Allgemeine Java-Themen 2
G Erste Schritte Aufgabe - Geht das auch schneller ? Allgemeine Java-Themen 7
E JavaFX String-Wert geht "verloren" - ratlos Allgemeine Java-Themen 2
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
H Unicode ausgeben ohne Umwandlung - geht das? Allgemeine Java-Themen 3
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
K print() geht nicht ohne println() Allgemeine Java-Themen 3
V 2D-Grafik BufferdImage aus gif Datei in Jar erzeugen geht nicht. Allgemeine Java-Themen 6
Fl4sh1 Autovervollständigungfenster geht nicht (eclipse) Allgemeine Java-Themen 10
P Absatz im String / Excel / /n geht nicht Allgemeine Java-Themen 2
Z Java geht nicht im Browser Allgemeine Java-Themen 5
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
B Keylistener geht nicht Allgemeine Java-Themen 9
R Wie geht man mit CachedRowSet um Allgemeine Java-Themen 2
I Downloaden einer Datei geht nicht? Allgemeine Java-Themen 16
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
R Geht das? JRE 1.4 global, 1.6.20 nur für eine Anwendung? Allgemeine Java-Themen 9
ruutaiokwu junit mit annotations geht nicht? Allgemeine Java-Themen 5
F externe module. geht das in Java? Allgemeine Java-Themen 3
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
M XML-Datei geht bei voller Festplatte verloren Allgemeine Java-Themen 4
DStrohma Daten in JAR speichern geht nicht?? Allgemeine Java-Themen 22
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
B Komplettes Projekt als UML Diagramm mit eUML...geht das? Allgemeine Java-Themen 10
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
C Methodenkopf: Zu was wenns auch ohne geht? Allgemeine Java-Themen 3
A Javakonsolenfenster geht gleich wieder zu Allgemeine Java-Themen 6
M Übergebener String bearbeiten geht nicht. Allgemeine Java-Themen 4
D iText und Table.setTableFitsPage(); geht nicht Allgemeine Java-Themen 12
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
A Standalone geht - JSP u. Bean nicht Allgemeine Java-Themen 6
D Jar auf Mac starten geht nicht Allgemeine Java-Themen 3
M Klasse Desktop geht nicht mehr (EXCEPTION_ACCESS_VIOLATION) Allgemeine Java-Themen 9
M ireport (Jasper Report) geht nur auf meinen Rechner Allgemeine Java-Themen 3
S Rechner formatiert - nichts geht mehr. Allgemeine Java-Themen 2
S Apache Commons Net geht nicht Allgemeine Java-Themen 5
zilti Wieso geht der StreamReader/Writer nicht? Allgemeine Java-Themen 5
T Geht das vielleicht noch einfacher? Allgemeine Java-Themen 7
M commapi unter vista, geht das? Allgemeine Java-Themen 4
V JavaProgramm von Konsole starten geht nichtmehr Allgemeine Java-Themen 4
V JVM OutofMemory Linux geht, windows nicht Allgemeine Java-Themen 3
Chris_1980 Geht das nicht auch einfacher (Arcanoid Multiball) Allgemeine Java-Themen 2
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
D Geht es auch schneller doppelte Einträge zu löschen? Allgemeine Java-Themen 23
K java geht beim chatten nicht? Allgemeine Java-Themen 2
G Mit Java auf windows 2003 userrechte zugreifen geht sowas ? Allgemeine Java-Themen 2
R Drag und Drop von externen Files geht nur als Application Allgemeine Java-Themen 2
O Input stream geht net Allgemeine Java-Themen 2
J Threads, Doppelpufferung --> Beispiel gefunden, geht net Allgemeine Java-Themen 16
P rar.exe und variablenparameter als String geht net Allgemeine Java-Themen 4
G Da Jikes nicht mit java 5 geht, gibt es eine andere. Allgemeine Java-Themen 4
TheJavaKid warum geht das nicht? Allgemeine Java-Themen 14
G setLastModified geht nicht Allgemeine Java-Themen 8
H Ausführungsgeschwindigkeit reduzieren. Geht das? .. Allgemeine Java-Themen 21
G parseInt geht nicht Allgemeine Java-Themen 10
K Mit Java kleine Freeware Programme erstellen. Geht das? Allgemeine Java-Themen 16
G Konsoleneingabe: vordefinierte werte setzen? geht das? Allgemeine Java-Themen 4
André B. geht das? Allgemeine Java-Themen 6
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
G Mouselistener geht aber danach Fehler bei JOptionPane Allgemeine Java-Themen 4
K Object casting geht nicht. Allgemeine Java-Themen 3
M Systemzeit der Java VM geht falsch Allgemeine Java-Themen 4
G Warum einfach wenns kompliziert auch geht? Allgemeine Java-Themen 12
K KeyEvent in eigenem Component geht nicht Allgemeine Java-Themen 3
L Jar-Datei aus Eclipse geht nicht Allgemeine Java-Themen 2
C Was geht noch? Allgemeine Java-Themen 13
P Nur eine Instanz eines Programms zulassen, wie geht das? Allgemeine Java-Themen 15
G Geht das? Allgemeine Java-Themen 4
V StreamTokenizer ???? Wie geht das Allgemeine Java-Themen 3
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben