Fehler beim Lesen von verschlüsselter xml-Datei

Status
Nicht offen für weitere Antworten.

trazzag

Bekanntes Mitglied
Hallo,

ich habe ein Programm geschrieben, welches mit XML-Dateien arbeitet. Nun wollte ich den Inhalt der Dateien mit Cipher verschlüsseln. Beim einlesen dieser verschlüsselten Datein bekomme ich allerdings eine NullPointerException.
Hier meine Methode zum Speichern (und verschlüsseln) der xml-Dateien:
Code:
public void saveXML(String datei, Document document) {
		try {

			Cipher c = Cipher.getInstance("DES");

			/* Schlüssel für die Verschlüsselung setzen */
			String key = "66776688";
			Key k = new SecretKeySpec(key.getBytes(), "DES");

			c.init(Cipher.ENCRYPT_MODE, k);

			/* FileOutputStream zum schreiben der Datei */
			FileOutputStream fos = new FileOutputStream(datei, false);

			/* FileOutputStream über CipherOutputStream verschlüsseln */
			CipherOutputStream cos = new CipherOutputStream(fos, c);

			/*
			 * Schreiben der XML-Datei (für unverschlüsselt: cos durch fos
			 * ersetzen)
			 */
			XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
			out.output(document, cos);
			
			fos.close();
			cos.close();
		
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Und hier der Codeschnipsel, in dem die xml wieder eingelesen wird:
Code:
Cipher c = Cipher.getInstance("DES");

/* Schlüssel für die Entschlüsselung setzen */
String key = "66776688";
Key k = new SecretKeySpec(key.getBytes(), "DES");

c.init(Cipher.DECRYPT_MODE, k);
			
FileInputStream fis = new FileInputStream("config.xml");
			
CipherInputStream cis = new CipherInputStream(fis, c);
			
//document = new SAXBuilder().build(new File("config.xml"));
document = new SAXBuilder().build(cis);

Also, entschlüsselt wird etwas, es scheint nur kein gültiges xml-Dokument mehr rauszukommen.
Hoffe, mir kann hier jemand helfen!
 

trazzag

Bekanntes Mitglied
Ich konnte den Fehler jetzt schon weiter eingrenzen: Scheinbar werden bei dem Ver- und auch Entschlüsseln der Datei jeweils die letzten paar Bytes einfach weggelassen.
Beispiel: Meine Schlüssellänge ist 8 Byte, die Datei ist 403 Byte groß, dann werden die letzten 3 Byte weggelassen.
Ist die Datei 400 Byte groß, die letzten 8...

Jemand Ideen?
 

HoaX

Top Contributor
vertausch mal beim ersten codeblock zeile 26/27. wenn der cipherstream noch was gepuffert hat und beim close scheiben will, aber der filestream schon zu ist dann könnten da deine daten verloren geht. sonst schauts eigentlich auf den erstenblick ok aus.
 

trazzag

Bekanntes Mitglied
Hat leider nichts gebracht... Ich vermute mal, es hängt mit der Schlüssellänge zusammen, also: die Anzahl der zu verschlüsselten Bytes muß ein vielfaches der Schlüssellänge sein (und alles darüber hinaus wird abgeschnitten) oder so ähnlich...?!?
 

trazzag

Bekanntes Mitglied
Hab ich versucht, hilft leider auch nicht...
Werd mir da wohl ne andere Lösung einfallen lassen müssen. Hat vielleicht jemand vorschläge?
 

kleiner_held

Top Contributor
Also wenn ich deinen Code hier teste, gibt es einen Lesefehler wenn ich die OutputStreams in dieser Reihenfolge schliesse
Code:
fos.close();
cos.close();
waehrend
Code:
cos.close();
fos.close();
oder auch ein einfaches
Code:
cos.close();
einwandfrei funktioniert.
 

trazzag

Bekanntes Mitglied
fos.close() und cos.close() hatte ich schon auf anraten von HoaX in der Reihenfolge verändert - hat nix gebracht.

Also, die Verschlüsselung läuft ja auch problemlos, solange die Byte-Anzahl, die verschlüsselt werden muß ein vielfaches von 8 ist. Der Rest fällt einfach weg.

Beim Entschlüsseln scheinen einfach Pauschal die letzten 8 Byte weggelassen zu werden...
 

kleiner_held

Top Contributor
Ich hab das ganz wie gesagt mit deinem geposteten Code getestet und es funktioniert mit beliebigen XML Dokumenten (halt mit dem vertauschten close). Deswegen sollte die Staffelung XMLOutputter -> CipherOutputStream -> FileOutputStream prizipiell funktionieren. Schau mal nach anderen Fehlerursachen.
 

trazzag

Bekanntes Mitglied
Bin das ganze jetzt ein wenig unschön umgangen: Ich hab mir eine Methode geschrieben, welche eine vorhandene Datei Byte-weise verschlüsselt. Also speicher ich erst unverschlüsselt und rufe dann die Verschlüsselung auf. Unschön, funktioniert aber...

Hier meine funktionierende Klasse zum Ver- und Entschlüsseln von Dateien:

Code:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.Key;
import java.util.ArrayList;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.spec.SecretKeySpec;

public class DeAndEncryption {

	public static void main(String[] args) {
		DeAndEncryption encr = new DeAndEncryption();
		encr.encryptFile("C:\\standard.xml");
		//encr.decryptFile("C:\\Test.xml");
	}

	private void encryptFile(String datei) {
		try {
			/* Quelldatei festlegen */
			FileInputStream fis = new FileInputStream(datei);

			/* Array für die Bytes der Quelldatei initialisieren */
			ArrayList<Integer> iArray = new ArrayList<Integer>();

			/* byte-weises Lesen der Quelldatei */
			int outbyte = fis.read();
			while (outbyte != -1) {
				iArray.add(outbyte);
				outbyte = fis.read();
			}
			
			/* Cipher-Instanz für die Verschlüsselung holen */
			Cipher c = Cipher.getInstance("DES");

			/* Schlüssel für die Verschlüsselung setzen */
			String key = "12312312";
			Key k = new SecretKeySpec(key.getBytes(), "DES");

			/* Verschlüsselung initialisieren */
			c.init(Cipher.ENCRYPT_MODE, k);

			/* OutputStream zum Schreiben der Datei */
			FileOutputStream fos = new FileOutputStream(datei);

			/* OutputStream über CipherOutputStream verschlüsseln */
			CipherOutputStream cos = new CipherOutputStream(fos, c);

			for (int i = 0; i < iArray.size(); i++) {
				cos.write((Integer) iArray.get(i));
			}
			cos.flush();
			cos.close();
			fos.close();

		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void decryptFile(String datei) {
		try {
			/* Quelldatei festlegen */
			FileInputStream fis = new FileInputStream(datei);

			/* Array für die Bytes der Quelldatei initialisieren */
			ArrayList<Integer> iArray = new ArrayList<Integer>();

			/* Cipher-Instanz für die Verschlüsselung holen */
			Cipher c = Cipher.getInstance("DES");

			/* Schlüssel für die Verschlüsselung setzen */
			String key = "12312312";
			Key k = new SecretKeySpec(key.getBytes(), "DES");

			/* Verschlüsselung initialisieren */
			c.init(Cipher.DECRYPT_MODE, k);

			/* InputStream über CipherInputStream entschlüsseln */
			CipherInputStream cis = new CipherInputStream(fis, c);
			
			/* byte-weises Lesen der Quelldatei */
			int outbyte = cis.read();
			while (outbyte != -1) {
				iArray.add(outbyte);
				outbyte = cis.read();
			}

			/* OutputStream zum Schreiben der Datei */
			FileOutputStream fos = new FileOutputStream(datei);

			for (int i = 0; i < iArray.size(); i++) {
				fos.write((Integer) iArray.get(i));
			}
			fos.flush();
			cis.close();

		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Warum die andere Variante bei mir nicht läuft, verstehe ich aber immernoch nicht so ganz... *kopfkratz*.
 

kleiner_held

Top Contributor
Damit hatte ich es bei mir getestet, vielleicht hilft es Dir bei der Problemsuche (ein Grossteil davon ist dein Code :) )
Code:
public class SaveLoadDES
{
	
	public static void main(String[] args)
	{
		try
		{
			String originalXmlFileName ="test.xml";
			String cryptFileName ="crypt.bin";
			// read document from file
			Document document = new SAXBuilder().build(originalXmlFileName);
			// write document encrypted to file
			saveXML(cryptFileName, document);
			// read encrypted document from file
			Document document2 = loadXML(cryptFileName);
			System.out.println("result:" + (document2.getContentSize() == document.getContentSize())); // stupid check
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public static Document loadXML(String fileName) 
	{
	    try
		{
			Cipher c = Cipher.getInstance("DES");

			/* Schlüssel für die Entschlüsselung setzen */
			String key = "66776688";
			Key k = new SecretKeySpec(key.getBytes(), "DES");

			c.init(Cipher.DECRYPT_MODE, k);

			FileInputStream fis = new FileInputStream(fileName);

			CipherInputStream cis = new CipherInputStream(fis, c);

			Document document = new SAXBuilder().build(cis);
			return document;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	public static void saveXML(String datei, Document document)
	{
		try
		{
			Cipher c = Cipher.getInstance("DES");

			/* Schlüssel für die Verschlüsselung setzen */
			String key = "66776688";
			Key k = new SecretKeySpec(key.getBytes(), "DES");

			c.init(Cipher.ENCRYPT_MODE, k);

			/* FileOutputStream zum schreiben der Datei */
			FileOutputStream fos = new FileOutputStream(datei, false);

			/* FileOutputStream über CipherOutputStream verschlüsseln */
			CipherOutputStream cos = new CipherOutputStream(fos, c);

			/*
			 * Schreiben der XML-Datei (für unverschlüsselt: cos durch fos
			 * ersetzen)
			 */
			XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
			out.output(document, cos);
			cos.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}
 

trazzag

Bekanntes Mitglied
Habe meine Save-XML-Methode heute nochmal überarbeitet (hatte irgendwo nen Zeilendreher). Auf jeden Fall läuft's jetzt...
Danke für die Hilfe!
 

PELLE

Bekanntes Mitglied
Hallo,

läuft das jetzt sauber bei dir oder auf die umständliche Weise ala:

wenns sauber läuft könntest du hier sagen, wie du den Fehler behoben hast?

Also speicher ich erst unverschlüsselt und rufe dann die Verschlüsselung auf. Unschön, funktioniert aber...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
U Fehler beim Compillieren Allgemeine Java-Themen 13
bueseb84 Fehler beim Import von Maven Dependencies aus lokalem artifactory Allgemeine Java-Themen 2
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
I Fehler beim Ant-Package erstellen mit Java 9 Allgemeine Java-Themen 1
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
J Interpreter-Fehler Fehler beim Verschlüsseln Invalid AES key length Allgemeine Java-Themen 1
V JavaFX Fehler beim Starten einer Jar Allgemeine Java-Themen 7
K Fehler beim erstellen von .jar Datei Allgemeine Java-Themen 3
M Eclipse Fehler beim Installieren des Plugins "Jigloo" Allgemeine Java-Themen 12
A Eclipse - Fehler beim "RUN" - "Unable to Launch - The selection cannot be launched" Allgemeine Java-Themen 6
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
H JUnit Fehler beim Compilieren - erledigt Allgemeine Java-Themen 0
J Fehler beim parsens eine Datums Allgemeine Java-Themen 3
G Fehler beim instanzieren einer Generischen Klasse Allgemeine Java-Themen 5
K Eclipse Fehler beim Ausführen meines Programms in Eclipse Allgemeine Java-Themen 11
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
S Fehler beim ausführen des HTML Allgemeine Java-Themen 7
D Fehler beim PDF convert Allgemeine Java-Themen 2
J Methoden Fehler beim serialisieren und laden!? help Allgemeine Java-Themen 4
P Fehler beim Export meines Lernbeispiel von Ralf Ebert Allgemeine Java-Themen 3
J Fehler beim JDownloader Allgemeine Java-Themen 3
B Fehler beim Rechnen mit Floats Allgemeine Java-Themen 3
D Fehler beim ersetzen in String Allgemeine Java-Themen 2
P Fehler beim Programmstart: java.lang.NoClassDefFound Allgemeine Java-Themen 12
N Fehler beim Runden?! Allgemeine Java-Themen 4
R doppelt verkettete Liste: Fehler beim Einfügen Allgemeine Java-Themen 3
H Fehler beim Seitenaufruf über IIS Allgemeine Java-Themen 2
R Fehler beim schreiben in eine Liste! Allgemeine Java-Themen 2
T Fehler beim Compilieren Allgemeine Java-Themen 10
zilti Eclipse meldet Fehler beim Start Allgemeine Java-Themen 8
G fehler meldung beim starten einer .jar datei Allgemeine Java-Themen 3
M Irgendwo einen Fehler beim Schreiben in die Datei :( Allgemeine Java-Themen 2
A Fehler beim Ersetzen eines Strings Allgemeine Java-Themen 3
T Decimalformat, Fehler beim runden? Allgemeine Java-Themen 8
S Fehler beim Einlesen einer Webseite mit 1.4 Allgemeine Java-Themen 3
G Syntax-Fehler beim aufrufen von generischen Klassenmethoden Allgemeine Java-Themen 4
I Fehler beim Schreiben von Datein Allgemeine Java-Themen 3
R Fehler beim kompilieren Allgemeine Java-Themen 8
O Fehler beim (De)installieren Allgemeine Java-Themen 4
M Fehler beim Start des Chat-Applets von java-forum.org Allgemeine Java-Themen 10
L Merkwürdiger Fehler beim auslesen einer Datei Allgemeine Java-Themen 2
P Eclipse: Kein Fehler beim Debuging aber beim normalen run Allgemeine Java-Themen 3
G Fehler beim Ausführen einer Applikation Allgemeine Java-Themen 4
M Fehler beim öffnen einer 20 mb Textdatei im sign. Applet Allgemeine Java-Themen 5
S Fehler beim return eines String Arrays Allgemeine Java-Themen 3
flashfactor Komischer Fehler beim Einlesen einer Datei. Allgemeine Java-Themen 2
G Fehler beim Speichern Allgemeine Java-Themen 3
G Fehler beim Datei oeffnen Allgemeine Java-Themen 5
D Fehler beim löschen eines Arraylist-element Allgemeine Java-Themen 5
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Fehler: <ID> erwartet Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
Pinhg Discord JDA Bot - Fehler Allgemeine Java-Themen 3
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
L Fehler mit Boolean. (Glaube ich zumindest) Allgemeine Java-Themen 6
O Fehler bei Variablen Allgemeine Java-Themen 2
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
C Fehler bei der Benutzung von itextpdf Allgemeine Java-Themen 1
x46 String Format Fehler Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Fehler bei IF abfrage Allgemeine Java-Themen 8
M Einheitenrechner - Fehler Allgemeine Java-Themen 12
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
T Denk-Fehler? Allgemeine Java-Themen 4
A Finde den Fehler nicht. Allgemeine Java-Themen 7
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
D Unbekannter Fehler Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
L Fehler bei der Ausführung einer Jar Allgemeine Java-Themen 2
T OOP Fehler im Design Allgemeine Java-Themen 9
Thallius Unfassbarer Fehler. Brauche Ideen zum Debuggen Allgemeine Java-Themen 9
U Eclipse MANIFEST fehler Allgemeine Java-Themen 7
I Fehler bei HashMaps Darstellung Allgemeine Java-Themen 10
R Classnotfoundexception Fehler Allgemeine Java-Themen 3
N Compiler-Fehler Warum erhalte ich einen Nullpointer Fehler? Allgemeine Java-Themen 2
N Prim's Algorithm - wo ist der Fehler? Allgemeine Java-Themen 3
M Line-Fehler Allgemeine Java-Themen 8
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
RalleYTN Merkwürdiger Fehler mit JFrame im Vollbild Allgemeine Java-Themen 4
V AudioInputStream Fehler Allgemeine Java-Themen 1
G Fehler mit Vector Allgemeine Java-Themen 3
F Java Fehler "buildTableModel" Allgemeine Java-Themen 3
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
DanielsLPecke Input/Output Arduino komischer Fehler. Allgemeine Java-Themen 38
S Hashtable Fehler Allgemeine Java-Themen 14
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben