Daten übers Netz verschlüsselt übertragen? Wie?

Status
Nicht offen für weitere Antworten.
M

madman

Gast
Hallo,

ich stehe grad vor dem Problem wie man Daten verschlüsselt übers Netz übertragen kann.
Die Datei liegt auf einem IIS im Intranet. Nur der Admin kommt an die Datei und kann Sie lesen.
Die Daten sollen auf Ihrem Weg durchs Netz verschlüsselt übertragen werden. Auf dem Client sollen sie für die Weiterverarbeitung wieder entschlüsselt werden.
Habe schon die Suche strapaziert aber keine befriedigende Lösung gefunden.
Kennt vieleicht jemand einen ersten Lösungsansatz oder ein Beispiel?

Bin für jeden Hinweis dankbar.

Gruß
Mike

Code:
String nextLine;
		 URL url = null;
		 URLConnection urlConn = null;
		 InputStreamReader  inStream = null;
		 BufferedReader buff = null;
			 try{
				    url  = new URL("http://localhost/conf/setting.conf" );
				    urlConn = url.openConnection();
				    inStream = new InputStreamReader(urlConn.getInputStream());
				    buff = new BufferedReader(inStream);
			     
			     //Verschlüsselte Übertagung? Wie
			     
			     //Entschlüsseln und zeilenweises auslesen
			     
			      while ((nextLine = buff.readLine()) != null) {
					      }
				} catch(MalformedURLException e){
				 System.out.println("URL überprüfen: " + e.toString() );
			} catch(IOException  e1){
			System.out.println("Connection failt: "+ e1.toString() ); 
		}
 
G

Guest

Gast
Hi AlArenal,

sorry irgendwie steh ich grad auf der Leitung. Hab ich das richtig gemacht oder hast du was anderes gemeint?

Meldung:
Please check the URL:javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

Hast du ne Idee?


Code:
String nextLine;
       URL url = null;
       URLConnection urlConn = null;
       InputStreamReader  inStream = null;
       BufferedReader buff = null;
          try{

                url  = new URL("http://localhost/conf/setting.conf" );
                urlConn = (HttpsURLConnection)url.openConnection(); 

                inStream = new InputStreamReader(urlConn.getInputStream());
                buff = new BufferedReader(inStream);
              
              //Verschlüsselte Übertagung? Wie
              
              //Entschlüsseln und zeilenweises auslesen
              
               while ((nextLine = buff.readLine()) != null) {
                     }
            } catch(MalformedURLException e){
             System.out.println("URL überprüfen: " + e.toString() );
         } catch(IOException  e1){
         System.out.println("Connection failt: "+ e1.toString() );
      }
 
M

madman

Gast
Hi,

das ist dann wohl auch das Problem. Somit kann ich kein SSL verwenden. Danke.
Gibt es sonst noch eine andere Möglichkeit einen InputStreamReader zu verschlüsseln?

Gruß
Mike
 
T

tuxedo

Gast
Jupp, Server verschlüsselt -->Übertragung--> Client entschlüsselt.

Am Client verschlüsseln geht, aber macht natürlich wenig Sinn LOL ...

Und wenn du nur via HTTP dran kommst (also kein Java-Tool oder ähnliches auf dem Server laufen lassen kannst), und der IIS kein SSL macht, dann bleibt dir nur der zwischenschritt über ein Script (PHP oder ähnliches), mit welchem du die Datei anforderst:

GET-Anfrage an das Script mit Namen der gewünschten Datei -> Script öffnet die Datei, verschlüsselt diese und gibt die Daten an den Client zurück. Der Client empfängt die Daten und entschlüsselt diese.

- Alex
 

NTB

Bekanntes Mitglied
Wenn die Datei eh auf dem Server so offen liegt, dass Du sie direkt lesen kannst, braucht sie auch nicht mehr verschlüsselt werden, denn dann kann sie sowieso jeder lesen.
 
T

tuxedo

Gast
Jo, das kommt noch hinzu. Wenn das Verzeichnis allerdings nicht eingesehen werden kann, und keiner weiß dass es die Datei gibt, dann kann sie auch nicht jeder runterladen (naja, können schon, aber da's niemand weiß...).
 
M

madman

Gast
Hallo zusammen,

ich wollte mich bei euch für eure Ideen bedanken. Die Tipps waren sehr hilfreich. Ich verschlüssele jetzt User und Passwort in eine datei "db.conf", liegend in einem Verzeichnis des IIS. Das Applet liest über urlConn.getInputStream() die Datei zeilenweise aus und entschlüsselt diese wieder. Für die Verschlüsselung nehme ich einen einfaches Verschiebechiffre. Ist mir schon klar, dass es nicht sicher ist. Zielsetzung war eben die Daten nicht im Klartext über Netz zu schicken. Diese Zielsetzung ist erfüllt.

Gruß
Mike
 
T

tuxedo

Gast
Ganz ehrlich? Die Verschlüsselung hättest du dir sparen können. Weil der, der sich die Arbeit macht die Pakete zu sniffen, für den ist es dann auch ein Kinderspiel dein Verschiebechiffre zu lösen.

Wenn du schon verschlüsselst, dann solltest du du wenigstens mit XOR verschlüsseln und einem ziemlich langen Schlüssel nehmen (kurze Schlüssel sind zu leicht zu knacken bei zu viel verschlüsselten Daten). Das ist dann schon aufwendiger zu knacken und macht man "nicht mal eben in 15min".

- Alex
 
S

SlaterB

Gast
nun ja, es macht doch einen sehr großen Unterschied,
ob man beliebige Daten der Form 'hello world' oder der Form 'gsdk füxvv' liest,

ein gewisser Anteil selbst unter Sniffer-Usern weiß nix von der Verschlüsselung
und noch ein bedeutender Anteil würde sich nicht die Mühe machen, da aufwendig extra noch zu entschlüsseln,
selbst wenn es nur 1 Min. dauert: in der Zeit kann man 10 andere unverschlüsselte Nachrichten lesen ;)
und größere Mengen an Daten bekommt man auch nicht unbedingt auf einen Schlag (edit: ok, für Verschiebung kaum nötig),

ist natürlich generell die Frage wer da mit welchen Intentionen snifft,
aber 'Zielsetzung war eben die Daten nicht im Klartext über Netz zu schicken.' klingt nach ganz allgemeiner anonymer Übertragung mit Verschlüsselung gegen beliebige unbekannte Mitleser

also: ist nicht sicher aber GANZ was anderes als Klartextübertragung,


-------

andererseits könnten verschlüsselte Nachrichten gerade das bösartige Interesse oder schlicht die Neugier der Sniffer erwecken,
insofern ist eine zu leichte Verschlüsselung dann doch kontraproduktiv? ;)
 
T

tuxedo

Gast
Ich mein ja nur: Mit nur ein klitzeklein wenig mehr Aufwand ist die Verschlüsselung gleich um ein vielfaches sicherer.

Wenn man nicht massig Daten überträgt, und einen nicht zu kleinen Schlüssel wählt (am besten wäre es, der Schlüssel wäre so lang wie die zu verschlüsselnden Daten selbst), ist XOR nicht wirklich zu knacken.

- Alex
 
M

madman

Gast
Hallo,

ja hab mir das Ganze nochmal überlegt und es folgender maßen probiert. Irgendwie dachte ich mir, das Ihr recht habt und son Verschiebechiffre schon ziemlich fürn A**** ist. Ich verwende jetzt Cipher. Dabei war mir das Kapitel in dem Buch Verschlüsseln von Datenströmen eine große Hilfe. Versuche hier eben aus klar.conf zeilenweise auszulese, um in crypto.conf sofort zeilenweise die verschlüsselten Daten zu schreiben. Wenn nur eine Zeile in der Datei klar.conf steht funzt das Ganze auch, macht aber so keinen Sinn. Bei 2 Zeilen geschieht etwas merkwürdiges. Dies sieht man sehr deutlich in der Ausgabe. Das Array dient nur der Kontrolle.

Scheinbar funktioniert das zeilenweise Auslesen der Datei, aber beim encodieren läuft was schief. Nämlich kann man beobachten, dass zeilenweise ausgelesen wird, aber bei der 2ten zeile "password" sich plötzlich die Codierung der ersten Zeile "username" = "F2iFhcujnYkIu122s3wG1" in der verschlüsselten Zeile wiederfindet.

Wie kann das sein? Ich bin echt sprachlos. Weiss vielleicht jemand Rat?
Auf Wunsch kann ich auch noch den vollständigen Code mit Ausgabe zum entschlüsseln posten.
Vielen Dank!

Gruß
Mike

Konsolenausgabe von WriteDES:
--------------------------------------------
zeile klartext: username
zeile verschlüsselt: F2iFhcujnYkIu122s3wG1w==
--------------------------------------------
zeile klartext: password
zeile verschlüsselt: F2iFhcujnYkIu122s3wG18Vagbu8OJ13CLtdtrN8Btc=
--------------------------------------------
array: [F2iFhcujnYkIu122s3wG1w==, F2iFhcujnYkIu122s3wG18Vagbu8OJ13CLtdtrN8Btc=]
arrayGröße:2
username: F2iFhcujnYkIu122s3wG1w==
password: F2iFhcujnYkIu122s3wG18Vagbu8OJ13CLtdtrN8Btc=


Code:
import java.io.*; 
import java.security.Key; 
import java.util.ArrayList;
import javax.crypto.*; 
import javax.crypto.spec.SecretKeySpec; 
import sun.misc.*; 
 
public class WriteDES 
{ 
	static File klar;
    static File chiffre;
    static ArrayList daten = new ArrayList();
		
	 public static void main( String[] args ) throws Exception 
	  { 
		 String zeile = null;
         klar = new File("D:\\Crypto\\klar.conf");
         FileReader fr = new FileReader(klar);
         BufferedReader br = new BufferedReader(fr);
         ByteArrayOutputStream out = new ByteArrayOutputStream(); 
         
         chiffre = new File("D:Crypto\\crypto.conf");
         FileOutputStream fout = new FileOutputStream(chiffre);
	     OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF-8");
	     BufferedWriter bw = new BufferedWriter(osw);  

         while ((zeile = br.readLine()) != null){
            System.out.println("plain: " + zeile );
     	    encode( zeile.getBytes(), out, "01234567" ); 
     	    
     	    String s = new BASE64Encoder().encode( out.toByteArray() ); 
     	    System.out.println("verschlüsselt: " + s );  
     	    daten.add(s);
         	bw.write(s); 
         	bw.newLine(); 
        }
         br.close(); 
         bw.close(); 
         System.out.println("array: " + daten);
         System.out.println("arrayGröße:" + daten.size()); 
         
         String username = (String) daten.get(0); 
         String password = (String) daten.get(1); 
         
         System.out.println("username: " +username);
         System.out.println("password: " +password);
  } 

  static void encode( byte[] bytes, OutputStream out, String pass ) throws Exception 
  { 
    Cipher c = Cipher.getInstance( "DES" ); 
    Key k = new SecretKeySpec( pass.getBytes(), "DES" ); 
    c.init( Cipher.ENCRYPT_MODE, k ); 
 
    OutputStream cos = new CipherOutputStream( out, c ); 
    cos.write( bytes ); 
    cos.close(); 
  } 
 
  
  static byte[] decode( InputStream is, String pass ) throws Exception 
  { 
    Cipher c = Cipher.getInstance( "DES" ); 
    Key k = new SecretKeySpec( pass.getBytes(), "DES" ); 
    c.init( Cipher.DECRYPT_MODE, k ); 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    CipherInputStream cis = new CipherInputStream( is, c ); 

    for ( int b; (b = cis.read()) != -1; ) 
      bos.write( b ); 
 
    cis.close(); 
    return bos.toByteArray(); 
  }  
}
 
S

SlaterB

Gast
erstl ein megakomplexes Programm schreiben und dann über die Java-Grundlagen nachdenken, was?

versuche mal, das gleiche Problem im folgenden Programm ebenso wiederzufinden:
Code:
public class Test2
{

    public static void main(String[] args)
        throws Exception
    {
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        out.write(new byte[] {2, 3, 4});
        System.out.println(Arrays.toString(out.toByteArray()));

        out.write(new byte[] {5, 6, 7});
        System.out.println(Arrays.toString(out.toByteArray()));
    }
}

Ausgabe:
[2, 3, 4]
[2, 3, 4, 5, 6, 7]
 
M

madman

Gast
Hallo,

danke für den Hinweis. Jetzt klappts!

Die Zeile
Code:
ByteArrayOutputStream out = new ByteArrayOutputStream();
gehört natürlich in die while-Schleife.

Gruß
Mike
 
T

tuxedo

Gast
Du musst ja nicht unbedingt zeilenweise arbeiten. Du kannst auch die ganze File (nach und nach) als byte[] einlesen, das alles in den Stream stecken, und das was raus kommt, wieder byte[] weise in die File schreiben. Rückwärts genauso.

- Alex
 
M

madman

Gast
Hi,

hab leider nicht die Zeit umzubauen. Mir ist aber beim Compilieren folgende Fehlermeldung aufgefallen:

Code:
myApplet.java:704: warning: sun.misc.BASE64Decoder is Sun proprietary API and may be removed in a future release
byte[] decode = new BASE64Decoder().decodeBuffer( zeile );

Heisst das etwa, dass vielleicht irgendwann mal sun.misc.BASE64Decoder nicht mehr unterstützt wird? Oder die Meldung einfach ignorieren?

Gruß
Mike
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kr0e Versenden von Daten übers Netzwerk Netzwerkprogrammierung 30
OnDemand Daten per API senden, parallel Netzwerkprogrammierung 9
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S Daten über TCP/IP senden Netzwerkprogrammierung 3
B Daten an Javaprogramm per URI Aufruf übergeben Netzwerkprogrammierung 7
N websocket - keine Daten mehr nach ca 80 Sekunden Netzwerkprogrammierung 0
C Spezielle Daten aus Website entnehmen Netzwerkprogrammierung 5
H Daten auf einer Webseite eintragen Netzwerkprogrammierung 11
A Socket Daten in Textdokument speichern? Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
J Daten von einem HTML-Textfeld abrufen Netzwerkprogrammierung 3
S Fakturierungsprogramm - Daten aktuell halten (blutiger Anfänger) Netzwerkprogrammierung 1
D Mit Server Daten austauschen Netzwerkprogrammierung 4
K Server liest Daten nicht Netzwerkprogrammierung 6
L HTTP Daten an Server übergeben Netzwerkprogrammierung 2
R Daten von Cloud laden Netzwerkprogrammierung 5
fLooojava Daten an ein Arduino im selben Netzwerk senden Netzwerkprogrammierung 1
X Daten können nicht sofort empfangen werden Netzwerkprogrammierung 1
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
P Socket Best Practice: Daten bündeln Netzwerkprogrammierung 5
E Verfügbarkeit von Daten in Streams Netzwerkprogrammierung 4
F Daten aus Internetseiten auslesen Netzwerkprogrammierung 56
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
H Daten an Textfeld einer Webseite schicken Netzwerkprogrammierung 2
A versch. Daten im Stream erkennen Netzwerkprogrammierung 2
D daten per post senden Netzwerkprogrammierung 3
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
J Applet soll Daten auf Server ablegen - einfachster Weg fuer n00bs? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
F UDP Daten kommen nicht an Netzwerkprogrammierung 22
E Socket OutputSream abbruch.Wegen zuviel !empfangener! Daten? Netzwerkprogrammierung 10
C Client zu Client Daten übertragen Netzwerkprogrammierung 13
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Socket XML-Daten und Parameter an Server schicken Netzwerkprogrammierung 3
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P HttpClient - Daten einer Website "unvollständig" Netzwerkprogrammierung 5
P Server/Client Daten empfangen, wenn Daten gesendet werden Netzwerkprogrammierung 9
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
T RMI Effizenteste Übertragung von Daten Netzwerkprogrammierung 6
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
E Daten kommen anders an als gesendert ?! Netzwerkprogrammierung 6
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
F POST-Daten sende Netzwerkprogrammierung 3
E HTTPS Debuggen (verschlüsselte Daten anzeigen)? Netzwerkprogrammierung 12
N Per POST -Methode Daten an den Web-Server übertragen. Netzwerkprogrammierung 9
Iron Monkey Große Daten ins Vector füllen Netzwerkprogrammierung 4
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
D Daten, die mit PHP erzeugt werden, mit Java auslesen Netzwerkprogrammierung 8
M Ethernet Daten abfangen Netzwerkprogrammierung 13
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
S Daten per GET-Methode Netzwerkprogrammierung 2
H Server soll Daten schicken, aber wie? Netzwerkprogrammierung 47
M Socket schließt bevor Daten komplett geladen Netzwerkprogrammierung 5
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
E rxtx serielles senden von Daten Netzwerkprogrammierung 2
D Socket, Daten über BufferedWriter senden Netzwerkprogrammierung 18
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
J Post-Daten an URL schicken Netzwerkprogrammierung 2
U Image erzeugen aus empfangenen Daten Netzwerkprogrammierung 7
A Wie werden Daten versendet? "Crashcode" Netzwerkprogrammierung 4
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
A Datenverlust (zuviele Daten!) über Sockets Netzwerkprogrammierung 4
T Daten über GSM verschicken Netzwerkprogrammierung 4
M Einfachste Möglichkeit aus'm Applet Daten an Server senden Netzwerkprogrammierung 6
P Verschiedene Daten über einen Stream Netzwerkprogrammierung 4
M Verliere Daten mit WinXP Netzwerkprogrammierung 10
O eingehende Daten speichern Netzwerkprogrammierung 3
D UDP-Daten anzeigen Netzwerkprogrammierung 2
D Daten per Server- Client nur als byte verschicken? Netzwerkprogrammierung 3
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
I ActiveMQ-Messages übers Netzwerk Netzwerkprogrammierung 13
D Socket-Verbindungen übers Internet Netzwerkprogrammierung 4
I PingPong Spiel übers Netzwerk Netzwerkprogrammierung 1
M Kommunikation übers Internet Netzwerkprogrammierung 9
E Java Server übers Internet erreichen Netzwerkprogrammierung 4
N RMI Einstellungen für "übers Internet" Netzwerkprogrammierung 8
N Gedankenspiel Synchronisation zweier Datenbanktabellen übers Netz Netzwerkprogrammierung 4
H Eine Mac-Adresse übers Internet ermitteln Netzwerkprogrammierung 2
X Password übers Netzwerk schicken jPasswordField Netzwerkprogrammierung 2
Y server client socket verbindung übers internet aufbauen Netzwerkprogrammierung 8
M Socket JFileChooser übers Internet Netzwerkprogrammierung 32
W funktionen übers netzwerk nutzen Netzwerkprogrammierung 4
W browse / durchsuchen übers netz Netzwerkprogrammierung 2
H MySQL übers Netzwerk Netzwerkprogrammierung 9
T Pfadangabe beim kopieren übers Netzwerk Netzwerkprogrammierung 5
A array übers netzwerk (anfänger) Netzwerkprogrammierung 8
R File chooser übers Netzwerk Netzwerkprogrammierung 3
S Netzwerk übers Internet Netzwerkprogrammierung 30
P Serialialiserte Objekte übers Netzwerk verschicken Netzwerkprogrammierung 9
H Dateigröße übers Internet Netzwerkprogrammierung 3
S Socketverbindung übers WWW Netzwerkprogrammierung 6
G Verzeichnis eines Rechners übers Netzwerk auslesen Netzwerkprogrammierung 5
S Kapselung der Netz-Objekte Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben