Avatar billede dansoend Nybegynder
04. maj 2003 - 01:47 Der er 2 kommentarer og
1 løsning

Krypteret server/klient

Jeg har et problem med at overføre filer fra en server til en klient i krypteret form. Min kode er som følger:

SERVER:

import java.io.*;
import java.net.*;

class ServerAES {
   
    private ServerSocket server;
    private Socket client;
    private String key;
    private int keySize;
    private ObjectInputStream input;
    private ObjectOutputStream output;

    public ServerAES(int portNo, String key, int keySize) throws IOException {
    this.key = key;
    this.keySize = keySize;
    server = new ServerSocket(portNo);
    System.out.println("Server waiting for connection.");
    client = server.accept();
    System.out.println("Cliented connected.");
    input =  new ObjectInputStream(client.getInputStream());
    output = new ObjectOutputStream(client.getOutputStream());
    }

    public void transferFile(String file) throws InvalidKeySizeException, IOException {
    StreamAES stream = new StreamAES(new BufferedInputStream(new FileInputStream(file)),output,key,keySize);
    stream.encrypt();
    }

    public static void main(String[] args) throws InvalidKeySizeException, InterruptedException, IOException {
    String key128 = "000102030405060708090a0b0c0d0e0f", file = "file1000.txt";
   
    ServerAES server = new ServerAES(47,key128,128);
   
    server.transferFile(file);

    Thread.sleep(5000);

    }
}

CLIENT:

import java.io.*;
import java.net.*;

public class ClientAES {
 
    private Socket server;
    private String key;
    private int keySize;
    private ObjectOutputStream output;
    private ObjectInputStream input;

    public ClientAES(String host, int portNo, String key, int keySize) throws IOException {
    this.key = key;
    this. keySize = keySize;
    try {
        server = new Socket(host,portNo);
    }
    catch (UnknownHostException e) {
        System.out.println("Server not found");
    }
    catch (ConnectException e) {
        System.out.println("Could not connect to server");
    }
   
    System.out.println("Connected to server");

    output = new ObjectOutputStream(server.getOutputStream());
    input = new ObjectInputStream(server.getInputStream());
    }

   
    public void receiveFile(String file) throws InvalidKeySizeException, IOException {
    StreamAES stream = new StreamAES(input,new BufferedOutputStream(new FileOutputStream(file)),key,keySize);
    stream.decrypt();
    }


    public static void main(String[] args) throws InvalidKeySizeException, InterruptedException, IOException {
    String key128 = "000102030405060708090a0b0c0d0e0f", host = InetAddress.getLocalHost().getHostAddress() , file = "dec_file1000.txt";

    ClientAES client = new ClientAES(host,47,key128,128);

    Thread.sleep(2000);

    client.receiveFile(file);
    }
}

encrypt/decrypt i StreamAES-klassen krypterer en InputStream og skriver det til en OutputStream. Den virker som den skal "lokalt" når jeg kun bruger filstrømme.

Mit problem er at der ikke bliver skrevet noget data til min output fil kaldet "enc_file1000.txt". Filen er helt tom når jeg har kørt serveren og klienten. Dette var naturligvis ikke hensigten.

Håber i kan hjælpe mig.
Avatar billede arne_v Ekspert
04. maj 2003 - 09:34 #1
Svært at sige når vi ikke har StreamAES klassen.

Gæt: du mangler at flushe når du skriver for faktisk at få
tingene skrevet fysisk.
Avatar billede dansoend Nybegynder
04. maj 2003 - 13:16 #2
det virkede når jeg flushede streamen (lidt pinligt ;-)), så hvis du laver et svar så får du dine point. Tak for hjælpen.
Avatar billede arne_v Ekspert
04. maj 2003 - 13:18 #3
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester