Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen

3BillionDevices

Neues Mitglied
Hi,

Ich habe seit einigen Tagen ein Problem:
Ich bin dabei ein Programm zu schreiben, beidem man sich anmelden kann und dann alle seine Passwörter speichern kann. Anmelden, Anmeldedaten verschlüsselt speichern, etc. Alles Funktioniert. Danach kommt man in das Hauptfenster hier kann man nun Angaben in TextFileds schreiben und in eine JList "speichern". Jetzt weiß ich sowohl wie man den Inhalt als "Normale" txt-Datei speichert. Ich weiß auch wie man Fließtexte verschlüsselt speichern kann (Da gibt es ja einige Varianten, die ich sogar fast alle drauf habe). Leider bekomme ich es jedoch einfach nicht darauf wie ich es machen soll, die JList verschlüsselt zu speichern und vor allem auch wieder einzulesen.

Der Quellcode von einer "normalen Speicherung" der JList mit Auslöse-Button und anschließendem Beenden:

Java:
private void jBtnEndeActionPerformed(ActionEvent evt) {
	BufferedWriter out = null;
	try {
	    out = new BufferedWriter(new FileWriter(dateiname));
	    for (int i = 0; i < jListPasswortlisteModel.getSize(); i++) {
		out.write(jListPasswortlisteModel.get(i).toString());
		out.newLine();
	    }

	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    if (out != null) { 
		try {
		    out.close(); 
		} catch (IOException e) {
		    e.printStackTrace();
		}
	    }
	}
	System.exit(0);
    }

Code:
out.newLine();
...das ist das größte Problem. Dieser Befehl ist nämlich beispielsweise bei einer Verschlüsselung mithilfe des FilterWriter und einer Unicode-Verschiebung nicht möglich.

Verschluesselte-Writer-Klasse (soweit kam ich 😉):

Java:
import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;

public class VerschluesseltWriter extends FilterWriter {
    public VerschluesseltWriter(Writer out) {
	super(out);
    }

    public void write(int c) throws IOException {
	super.write(c + 1);
	/* Schreibt an Stelle des Zeichens c das um eine Position
	 * im Unicode nach hinten verschobene Zeichen
	 */
    }

    public void write(char[] c, int offset, int count) throws IOException {
	for (int i = 0; i < count; i++)
	    write(c[offset + i]);
    }

    public void write(char[] c) throws IOException {
	write(c, 0, c.length);
    }

    public void write(String s, int offset, int count) throws IOException {
	for (int i = 0; i < count; i++)
	    write(s.charAt(offset + i));
    }

    public void write(String s) throws IOException {
	write(s, 0, s.length());
    }
}

Leider habe ich dann jedoch das Problem: Sobald ich versuche mithilfe der obigen Klasse das verschlüsselte Speichern zu starten wird beim öffnen alles in eine Zeile ausgegeben, der Befehl
Code:
out.newLine()
funktioniert leider durch die Klasse nicht.



Hat vielleicht jemand eine Idee meinen Quellcode zu verändern, oder eine ganz andere Idee.

Ich bedanke mich schon im Voraus 😀

Bei dieser Sache bin ich echt am Verzweifeln ???:L

MfG
3BillionDevices
 
Dieser Befehl ist nämlich beispielsweise bei einer Verschlüsselung mithilfe des FilterWriter und einer Unicode-Verschiebung nicht möglich.

Ich habe den Eindruck du redest hier von zwei verschiedenen Dingen.
Ver-und Entschlüsselung kann ja komplett getrennt betrachtet werden von der Speicherung der Texte.
ja, dies kann man sogar in-memory machen und getrennt probieren:
Java:
	@Test
	public void testEncode() {
		Encoder encoder = new Encoder();
		String cipherText = encoder.encodeText("Dies ist Text der codiert werden soll");
		assertEquals("Kodierter Text ist falsch", "cb40d858b1cbf6555f3c238d7e9684c0", cipherText);
	}

	@Test
	public void testDecode() {
		Decoder encoder = new Decoder();
		String decodedText = encoder.decodeText("cb40d858b1cbf6555f3c238d7e9684c0");
		assertEquals("Dekodierter Text ist falsch", "Dies ist Text der codiert werden soll", decodedText);
	}
Das Speichern ist dann also noch das Schreiben von Informationen in eine Datei.
Laut javadoc ist
Java:
abstract class FilterWriter extends Writer
FilterWriter eine abstrakte Klasse und du musst eine reale Implementierung haben, um ein Objekt erzeugen zu können. Ich sehe auch nicht, warum du nicht einfach einen PrintWriter nimmst, denn das Verschlüsseln/Entschlüsseln machst du ja im Encoder/Decoder.
 

Zurück
Oben