gewisse Zeichen sind nach dem entschlüsseln anders

Status
Nicht offen für weitere Antworten.

dotlens

Top Contributor
hallo

ich habe mir eine Klasse geschrieben, mit welcher ich Dateien verschlüsseln und Natürlich auch entschlüsselt möchte. Dazu verwende ich cypher.
Das ganze funktioniert eigentlich auch, nur gewisse Zeichen werden nicht richtig entschlüsselt.
Dazu gehören (glaube ich) nur ANSII Zeichen, und keine ASCII

Meiner Ansicht nach passiert dies erst wenn ich die Bytes in einen String packe. Denn als ich nur es nicht zuerst in eine Datei geschrieben habe, hat es tiptop geklappt.

Als ich es aber zuerst in einen String gepackt hab, dann wieder die bytes genommen und diese entschlüsselt, kam ein Fehler.

die Klasse:
Code:
/*
 * Created on 17.02.2006
 *
 */
package server.base;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;


public class Crypter2 {
	private Key key;
	
	private static Crypter2 crypter = new Crypter2();
	
	private Crypter2(){
		try {
			KeyGenerator keyGen = KeyGenerator.getInstance("DES");
			key = keyGen.generateKey();
		}
		catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
	}
	
	public static Crypter2 getInstance(){
		return crypter;
	}
	
	public void encrypt(File sourceFile, File encryptedFile){
		try {
			Cipher cipher = Cipher.getInstance("DES");
			cipher.init(Cipher.ENCRYPT_MODE, key);
			
			FileReader reader = new FileReader(sourceFile);
			CipherOutputStream COS = new CipherOutputStream(new FileOutputStream(encryptedFile), cipher);
			
			int numChar;
			char[] buffer = new char[10];
			while ((numChar = reader.read(buffer)) != -1) {
				String enc = new String(buffer);
				System.out.println("encrypt: " + enc);
				COS.write(new String(buffer).getBytes());
			}
			reader.close();
			COS.flush();
			COS.close();
		}
		catch (NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		}
		catch (NoSuchPaddingException e1) {
			e1.printStackTrace();
		}
		catch (InvalidKeyException e1) {
			e1.printStackTrace();
		}
		catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void decrypt(File encryptedFile, File decryptedFile){
		try {
			Cipher cipher = Cipher.getInstance("DES");
			cipher.init(Cipher.DECRYPT_MODE, key);
			
			FileWriter writer = new FileWriter(decryptedFile);
			CipherInputStream CIS = new CipherInputStream(new FileInputStream(encryptedFile), cipher);
			byte[] buffer = new byte[1];
			int k;
			while ((k = CIS.read(buffer)) != -1) {
				System.out.print(new String(buffer));
				writer.write(new String(buffer));
			}
			writer.flush();
			writer.close();
			CIS.close();
		}
		catch (NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		}
		catch (NoSuchPaddingException e1) {
			e1.printStackTrace();
		}
		catch (InvalidKeyException e1) {
			e1.printStackTrace();
		}
		catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Aufrufen tu ich sie so:
Code:
File sourceFile = new File("C:\\Documents and Settings\\unp01011\\Desktop\\abb.ppt");
				File encryptedFile = new File("C:\\Documents and Settings\\unp01011\\Desktop\\abb_encryp.ppt");
				File decryptedFile = new File("C:\\Documents and Settings\\unp01011\\Desktop\\abb_decryp.ppt");
				Crypter2.getInstance().encrypt(sourceFile, encryptedFile);
				Crypter2.getInstance().decrypt(encryptedFile, decryptedFile);
				System.out.println("");
				System.out.println("finished");

Wo könnte das Problem liegen, hat jemand eine Idee?
Und wenn String das Problem ist, wie kann ich es umgehen?

Danke und Gruss
 

Bleiglanz

Gesperrter Benutzer
new FileInputStream(encryptedFile)

new String(buffer).getBytes()

nimmt das Default-Encoding deiner Plattform

das ist völliger Unsinn, weil du uU die Datei ja auf einen anderen Rechner transferieren willst

verwende für die Übersetzung

byte[] <-> String

IMMER eine Methode mit expliziter Angabe des Character-Encodings


und ausserdem:

wenn du ganze Dateien ver- und entschlüsseln willst, dann arbeite mit den Bytes direkt? Der Umweg über String - Reader- Writer ist doch absolut sinnlos (und bei dir noch dazu falsch implementiert)

einfach nen InputStream und OutputStream und fertig


und nochwas: dein Cipher "DES" ist auch nicht wirklich portabel, es ist mehr oder weniger Zufall ob du so eine Datei mit einer anderen JVM wieder dekodieren kannst

=> immer Padding und Blockmode angeben
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H gewisse Nummer aus String auslesen Allgemeine Java-Themen 5
S Gewisse Klassen des JRE ausschliessen? Allgemeine Java-Themen 8
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
S Zeichen | in regex Allgemeine Java-Themen 8
_user_q JavaFX Robot alle Unicode-Zeichen schreiben lassen können Allgemeine Java-Themen 12
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Checkstyle 100 Zeichen pro Zeile Allgemeine Java-Themen 11
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
M Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
N Überprüfung ob ein bestimmtes Zeichen <1 mal vorkommt Allgemeine Java-Themen 2
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
G Übermittlung zusätzlicher ASCII-Zeichen bei Übertragung von Dateiinhalt mit Xmodem - JAVA Allgemeine Java-Themen 9
R Wie bekomme ich das Zeichen 'digit' an vorderster Stelle Allgemeine Java-Themen 4
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
N Datei Zeilenweise Einlesen, Versteckte Zeichen Allgemeine Java-Themen 5
Xge Replace x Zeichen aus String Allgemeine Java-Themen 2
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen &#8203; Allgemeine Java-Themen 3
E Compiler-Fehler Unicode Zeichen einlesen Allgemeine Java-Themen 1
U Variablen Stringarrays mit wenig verschiedenen Zeichen effizienter speichern Allgemeine Java-Themen 10
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
AssELAss String jeweils nach x Zeichen Zeilenumbruch Allgemeine Java-Themen 1
DStrohma Input/Output KeyEvent nur verarbeiten wenn es ein "sichtbares" Zeichen ist? Allgemeine Java-Themen 1
B In Java String ein + Zeichen Allgemeine Java-Themen 4
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
V Tastendruck für UTF-8 Zeichen emulieren Allgemeine Java-Themen 4
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
C Hex Zeichen ersetzen durch leer Zeichen Allgemeine Java-Themen 5
R Besondere Zeichen in Dateinamen Allgemeine Java-Themen 4
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
G AES Verschlüsselung nur bis 63 Zeichen Länge Allgemeine Java-Themen 2
M Fehlende Zeichen beim Drucken mit PDFBox Allgemeine Java-Themen 10
J String nur erste Zeichen vergleichen Allgemeine Java-Themen 6
C Variablen $-Zeichen in String ersetzen Allgemeine Java-Themen 3
S String Zeichen für Zeichen vergleichen Allgemeine Java-Themen 4
L Problem bei ausführbarer jar Datei mit Unicode-Zeichen Allgemeine Java-Themen 4
S String in Double - letztes Zeichen fehlt Allgemeine Java-Themen 4
A Erstes Zeichen im String "toUpperCase"n Allgemeine Java-Themen 11
A Umwandlung von Text/Zeichen in Polynome Allgemeine Java-Themen 8
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3
M Nach Programmdurchlauf werden Zeichen falsch dargestellt + Anderes Verhalten unter Windows Allgemeine Java-Themen 6
Zettelkasten Aus String bestimmtes Zeichen herausfinden Allgemeine Java-Themen 19
M Asterisk in String ("Egal-Zeichen") Allgemeine Java-Themen 4
V Chinesische Zeichen Escapen Allgemeine Java-Themen 4
I Teilweise falsche Darstellung jap. Zeichen im JEditorPane mit RTFEditorKit aus RTF-Datei Allgemeine Java-Themen 5
D Datei mit allen Ascii Zeichen Allgemeine Java-Themen 2
R Unsichtbare Zeichen Allgemeine Java-Themen 7
U Namen von Klassen haben $-Zeichen Allgemeine Java-Themen 5
P RegEx und $-Zeichen als Literal Allgemeine Java-Themen 5
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
C Strings zwischen 2 Zeichen auslesen Allgemeine Java-Themen 7
A Zeichen beim Eingeben in ein DOS-Fenster nicht anzeigen? Allgemeine Java-Themen 3
F Hexcode von ASCII Zeichen erhalten Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
V Dateien mit &-Zeichen im Namen öffnen Allgemeine Java-Themen 13
N String in einzelne Zeichen zerlegen Allgemeine Java-Themen 8
M Problem mit Zeichen aus einer Datei auslesen Allgemeine Java-Themen 2
T Shapes vergleichen? Zeichen erkennen? Allgemeine Java-Themen 7
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
G Tschechische Zeichen in XML-Antwort Allgemeine Java-Themen 22
J Encoding und Gewinnung von Zeichen aus der Hexa-Darstellung Allgemeine Java-Themen 6
N Xor Warum kommt Flasches Zeichen in Java Allgemeine Java-Themen 36
S Stringarray splitten an unbekanntem Zeichen Allgemeine Java-Themen 7
A Dezimalzahlen: Komma-Zeichen Allgemeine Java-Themen 4
T Einzelnes Zeichen von der Tastatur einlesen, aber ohne Enter Allgemeine Java-Themen 4
S Was bedeutet dieser Zeichen Allgemeine Java-Themen 4
E Wie Zeichen eingeben mit Klasse Scanner? Allgemeine Java-Themen 5
S Zeichen, dass Programm noch läuft Allgemeine Java-Themen 3
M Anwendung nur einmal starten / Zeichen in String zählen Allgemeine Java-Themen 7
T [Regex] Zeichen ausschließen Allgemeine Java-Themen 8
Luma Unicode Steuerzeichen von druckbaren Zeichen trennen Allgemeine Java-Themen 10
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
G String parsen und Problem mit escaped zeichen Allgemeine Java-Themen 4
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
A bestimmte Zeichen aus einem String auslesen Allgemeine Java-Themen 2
L unicode-zeichen in ein txt-File schreiben Allgemeine Java-Themen 3
J Problem mit nichtlateinischen Zeichen Allgemeine Java-Themen 2
B String + Zeilenumbruch nach X-Zeichen Allgemeine Java-Themen 4
M Nach 4 Zeichen Fokus ändern Allgemeine Java-Themen 2
oliver1974 Wie ResourceBundles mit Unicode Zeichen korrekt einlesen? Allgemeine Java-Themen 4
E Alarm ausgeben (ASCII Zeichen 7) über Lautsprecher Allgemeine Java-Themen 11
G Alle Zeichen des Alphabets ausgeben Allgemeine Java-Themen 4
K String-Objekt mit zig tausend Zeichen Allgemeine Java-Themen 12
T Muster/Zeichen/Texterkennung auf einem Image Allgemeine Java-Themen 9
Y Zeichen verschiedenfarbig in einer JTextPane darstellen Allgemeine Java-Themen 17
P Regulärer Ausdruck um sich wiederholende Zeichen zu finden. Allgemeine Java-Themen 9
O Split methode tut bei Zeichen "\", "\\" Allgemeine Java-Themen 7
H Unicode Darstellung in Java, spezielles Zeichen gesucht Allgemeine Java-Themen 4
S Unicode-Zeichen erstellen/ Kodierung Allgemeine Java-Themen 4
J RegEx: "wenn zeichen folgen ersetze x mit y, sonst mit Allgemeine Java-Themen 2
Z Zeichen/char in einer Datei löschen Allgemeine Java-Themen 6
I $ zeichen im class-namen Allgemeine Java-Themen 4
S ￾ Zeichen umwandeln in ü per .replace(); Allgemeine Java-Themen 6
N Zeilenumbruch in String nach jeweils x Zeichen einfügen? Allgemeine Java-Themen 6
G Wandeln von Char Wert in Zeichen? Allgemeine Java-Themen 2
G subString() aber nicht auf Länge sondern auf Zeichen Allgemeine Java-Themen 3
L Hex --> Dezimal --> Zeichen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben