Verschlüsselung mit Cipher

mannni10

Mitglied
Hallo allerseits,

ich habe folgendes Problem: Ich habe eine XML Datei in die ich Daten via Java reinschreibe.
Nun ist mir aufgefallen, das diese völlig unverschlüsselt auf der Festplatte liegt. Also habe ich mich dran gemacht die Datei zu verschlüsseln.

Das sieht folgender maßen aus:

Java:
public static void cryptAll() throws JAXBException, IOException,
			InvalidKeyException, NoSuchAlgorithmException,
			NoSuchPaddingException, IllegalBlockSizeException,
			BadPaddingException {
		// Dateiinhalt einlesen und in Variable "datei" speichern.
		String s = "";
		StringBuffer datei = new StringBuffer();
		BufferedReader in = new BufferedReader(new FileReader(Pfad
				.getInstance().getPfad()
				+ "\\KeyAdministration\\applications.xml"));
		while ((s = in.readLine()) != null) {
			datei.append(in.readLine() + System.getProperty("line.separator"));
		}
		// Daten in einen String speichern
		String apps = datei.toString();
		// Daten verschlüsseln
		byte[] cryptApp = encrypt(apps);
		// Daten wieder in file schreiben
		in.close();
		file = new File(Pfad.getInstance().getPfad()
				+ "\\KeyAdministration\\applications.xml");
		try {
			writer = new FileWriter(file);

			for (int i = 0; i < cryptApp.length; i++) {
				writer.write("" + cryptApp[i] + ",");
				writer.write(System.getProperty("line.separator"));
				writer.flush();
			}
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
}

public static void decryptAll() throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException{
			//Verschlüsselte Datei auslesen und in Variable datei speichern
			String s = ""; 
	        StringBuffer datei = new StringBuffer();
	        BufferedReader in = new BufferedReader(new FileReader(Pfad.getInstance().getPfad()+"\\KeyAdministration\\applications.xml")); 
	        while((s = in.readLine()) != null){
	           datei = datei.append(s); 
	        } 
	        String apps = datei.toString();
	        //Variable splitten
	        String[] decApps = apps.split(",");
	        //Variable in einem byte Array speichern
	        cryptApp = new byte[decApps.length];
        	for (int i = 0; i<decApps.length;i++){
	        	int x = Integer.parseInt(decApps[i]);
	        	cryptApp[i] = convertIntToByteArray(x);
	        }
        	//Daten wieder entschlüsseln und in die Datei zurück schreiben!
	        String decoded = decrypt(cryptApp);
	        in.close();
			  file = new File(Pfad.getInstance().getPfad()+"\\KeyAdministration\\applications.xml");
			     try {
			       writer = new FileWriter(file);
			       
				       writer.write(decoded);
				       writer.flush();
//			       }
			       writer.close();
			    } catch (IOException e) {
			      e.printStackTrace();
			    }
}

public static byte[] encrypt(String args) throws NoSuchAlgorithmException, NoSuchPaddingException, IOException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
		byte[] bytes = args.getBytes();
		c = Cipher.getInstance( "DES" );
		java.security.Key k = new SecretKeySpec( getSchluessel().getBytes(), "DES" );
	    c.init( Cipher.ENCRYPT_MODE, k );
	    byte[] encoded = c.doFinal(bytes);
	    System.out.println(encoded);
	    
	    return encoded;
	}
	
	public static String decrypt(byte[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
		c = Cipher.getInstance( "DES" );
		java.security.Key k = new SecretKeySpec( getSchluessel().getBytes(), "DES" );
	    c.init( Cipher.DECRYPT_MODE, k );
	    byte[] bytes = c.doFinal(args);
	    String decoded = new String(bytes);
	    System.out.println(decoded);
	    
	    return decoded;
	}

	public static String getSchluessel() {
		return schluessel;
	}

 private static byte convertIntToByteArray(int val) {
        byte[] buffer = new byte[4];
   
        buffer[0] = (byte) (val >>> 24);
        buffer[1] = (byte) (val >>> 16);
        buffer[2] = (byte) (val >>> 8);
        buffer[3] = (byte) val;
        
        return buffer[3];
}

Mein Problem ist jetzt: Es kommt immer etwas anderes raus als vor der Verschlüsselung drin stand.
Kann mir jemand sagen was der Fehler ist?
Und wenn wir schon dabei sind: Mein Code sieht vielleicht nicht gerade Professionell aus, wenn jemand Verbesserungsvorschläge hat, nur raus damit!

Vielen Dank schon einmal im Voraus.

Gruß, Manni
 
A

abcfed

Gast
Es ist zwar nicht wirklich die Antwort aber trotzdem ganz gut zu wissen, wie ich finde:

Der Verschlüsselungsverfahren ist nicht sehr effizient und sinnvoll würde ich sagen. Warum speicherst du die Daten nicht direkt binär sondern repräsentierst sie als String? Deine Datei ist bestimmt 4-mal so groß wie eine normal verschlüsselte.

Außerdem könnte ein Fehler sein, dass du beim Verschlüsseln nach jedem Byte eine neue Zeile anfängst, diese aber beim Entschlüsseln nicht beachtest, oder?
 
M

MannMitBart

Gast
http://www.java-forum.org/allgemeine-java-themen/137796-verwendung-cipher-gnu-crypto-serpent.html#post911986

Zufälligerweise habe ich vor kurzem auch so ein ähnliches Problem gehabt.
Wenn du willst kannst du ja diesen Code verwenden.

So könnte das Zum Bleistift aussehen.
Java:
String password="spam";
FileInputStream fileInputStream=new FileInputStream("C:\\some.xml");
FileOutputStream fileInputStream=new FileOutputStream("C:\\some.xml.encrypted");
CryptographyModule.encrypt(fileInputStream, fileOutputStream, password.getBytes());
fileOutputStream.close();
fileInputStream.close();

Der Rest sollte selbsterklärend sein (gnu-crypto musst du allerdings noch aus dem Web beziehen und in deinen Classpath einbinden).
 

mannni10

Mitglied
Hallo liebe leuts,

leider habe ich erneut ein Problem mit der Verschlüsselung.
Da ich beschlossen habe die Daten in der Datei nicht zu entschlüsseln, sondern nur einzulesen und dann zu entschlüsseln (das sie nicht offen herumliegen während das Programm läuft) bin ich wieder auf mein altes Verschlüsselungsverfahren umgestiegen.

Hierbei gehe ich wie folgt vor:

Java:
//Hier frage ich ab ob die Datei existiert, falls ja wird die Methode zum entschlüsseln aufgerufen
File keyFile = new File(Pfad.getInstance().getPfad() + "\\KeyAdministration\\keys.xml");
		if (keyFile.exists())
			Crypt.decryptData(keyFile.getPath());

Java:
//Hier die Methode zum einlesen der Datei:
public static String decryptData(String path) throws IOException, InvalidKeyException,
			NoSuchAlgorithmException, NoSuchPaddingException,
			IllegalBlockSizeException, BadPaddingException, JAXBException {
			//Verschlüsselte Datei auslesen und in Variable datei speichern
			String s = ""; 
			StringBuffer datei = new StringBuffer();
	        File file = new File(path);
	        if (file.exists()){
	        BufferedReader in = new BufferedReader(new FileReader(file)); 
	        while((s = in.readLine()) != null){
	           datei = datei.append(s); 
	        }
	        String data = datei.toString();
	        //Variable splitten
	        String[] dataArray = data.split(",");
	        //Variable in einem byte Array speichern
	        cryptData = new byte[dataArray.length];
        	for (int i = 0; i<dataArray.length;i++){
	        	int x = Integer.parseInt(dataArray[i]);
	        	cryptData[i] = convertIntToByteArray(x);
	        }
        	//Entschlüsselungsmethode
	        decoded = decrypt(cryptData);
	        in.close(); 
	        }
			return decoded;
	}

//Und hier die Methode zum entschlüsseln
public static String decrypt(byte[] args) throws NoSuchAlgorithmException,
			NoSuchPaddingException, InvalidKeyException,
			IllegalBlockSizeException, BadPaddingException, IOException {
		Cipher c = Cipher.getInstance("DES");
		java.security.Key k = new SecretKeySpec(getSchluessel().getBytes(),
				"DES");
		c.init(Cipher.DECRYPT_MODE, k);
		byte[] bytes = c.doFinal(args);
		String decoded = new String(bytes);
		System.out.println(decoded);

		return decoded;
	}

Es funktioniert auch alles wunderbar, sprich: einlesen, umwandeln ...
Allerdings bekomme ich trotz alle dem ein bytes im String zurück und nicht den entschlüsselten String!
Beim debuggen ist die decoded Variable in der die entschlüsselte Zeichenkette stehen sollte null und danach stehen Zahlen drin :-/
Kann mit da jemand helfen? Ich finde den Fehler nicht :(

Vielen Dank und Liebe Grüße
Manni ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Verschlüsselung mit Cipher Allgemeine Java-Themen 8
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
X Verschlüsselung Allgemeine Java-Themen 18
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
R Verschlüsselung falsch Allgemeine Java-Themen 3
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
D AES Verschlüsselung / Wirklich AES 128-Bit? Allgemeine Java-Themen 4
I Best Practice Verschlüsselung mit SALT Allgemeine Java-Themen 4
A Mehrfache XOR Verschlüsselung Allgemeine Java-Themen 11
Thallius Moderne sichere synchrone Verschlüsselung mit Java? Allgemeine Java-Themen 3
Ananaskirsche Verschlüsselung mit AES Allgemeine Java-Themen 4
E Verschlüsselung Allgemeine Java-Themen 4
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
S Key (für AES-Verschlüsselung) aus String Allgemeine Java-Themen 4
M Serialisierung & Verschlüsselung Allgemeine Java-Themen 2
K Problem mit Salted - Verschlüsselung Allgemeine Java-Themen 4
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
J Verschlüsselung von Text? Allgemeine Java-Themen 2
K Vigenere- Verschlüsselung Allgemeine Java-Themen 13
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
T AES-Verschlüsselung mit eigenem 256 Bit Schlüssel Allgemeine Java-Themen 12
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
G AES Verschlüsselung nur bis 63 Zeichen Länge Allgemeine Java-Themen 2
B XOR Verschlüsselung Allgemeine Java-Themen 7
S Framework für symetrische und asymetrische Verschlüsselung Allgemeine Java-Themen 3
lumo Verschlüsselung Allgemeine Java-Themen 2
H Verschlüsselung mit Blowfish Allgemeine Java-Themen 14
C Interpreter-Fehler AES verschlüsselung mit MD5 key Allgemeine Java-Themen 6
S AES Verschlüsselung - File Headers korrupt Allgemeine Java-Themen 10
A Datei, UTF-8, NTRU-Verschlüsselung Allgemeine Java-Themen 3
B "Verschlüsselung" mit Passwort (XOR bzw. Modulo) Allgemeine Java-Themen 7
B String Verschlüsselung Allgemeine Java-Themen 6
M Verschlüsselung anwenden Allgemeine Java-Themen 6
J Verschlüsselung Allgemeine Java-Themen 22
T MD5 Verschlüsselung Nullen fehlen? Allgemeine Java-Themen 2
L [Exception] RSA Verschlüsselung. Allgemeine Java-Themen 16
C javamail signatur und verschlüsselung Allgemeine Java-Themen 2
R 128 Bit Verschlüsselung/Entschlüsselung in Java? Allgemeine Java-Themen 6
F RSA-Verschlüsselung Allgemeine Java-Themen 4
S Verschlüsselung in Java Allgemeine Java-Themen 2
G Interessant! Verschlüsselung in Java, Charset in der JVM? Allgemeine Java-Themen 14
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T Verschlüsselung von Dateien Allgemeine Java-Themen 8
S Verschlüsselung - IllegalBlockSizeException Allgemeine Java-Themen 3
G Problem mit RSA Verschlüsselung bei .net und Java Allgemeine Java-Themen 1
D Caesar und Vigenère Verschlüsselung Allgemeine Java-Themen 2
alexpetri Verschlüsselung Allgemeine Java-Themen 13
@ [Sicherheit] Speicherung von Keys für Verschlüsselung Allgemeine Java-Themen 4
P Verschlüsselung in PHP -> Entschlüsselung in Java Allgemeine Java-Themen 2
Lazybone Caeser Verschlüsselung Allgemeine Java-Themen 6
S Verschlüsselung Allgemeine Java-Themen 15
J Problem mit Dateien/XOR-Verschlüsselung Allgemeine Java-Themen 5
G RSA-Verschlüsselung Allgemeine Java-Themen 1
P HMACMD5- Verschlüsselung entschlüsseln Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J Probleme bei XOR verschlüsselung ! Allgemeine Java-Themen 5
G Verschlüsselung in Java Allgemeine Java-Themen 9
M RSA Verschlüsselung Allgemeine Java-Themen 7
J Verschlüsselung von Daten Allgemeine Java-Themen 21
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
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
E Cipher geht mal und mal nicht 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
M Probleme mit Cipher: java.security.InvalidKeyException Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben