Szyfrowanie

0

Witam

Moj kod:

https://github.com/Prank866/ElGamal-Szyfrowanie

ps.(nie patrzcie na klase CipherClass to była klasa testujaca)

Mam za zadanie zaszyfrowac polaczenie miedzy klientem serwerem szyfrem ElGamal'a. Wiem tyle że musi być klasa która:

  • ma funkcje deszyfrującą
  • ma funkcje szyfrującą
    Do tego pomiedzy serwerem a klientem musi byc mozliwosc wymiany klucza publicznego.

Zaprojektowanie nie jest dosc trudne gorzej z implementacja tego w kodzie :

Szyfrowanie

  1. a mianowicie chciałbym aby funkcja szyfrująca zamieniała stringa na bajty za pomoca zamienienia stringa na tablice stringow
  2. pozniej kazdy element ma swoj odpowiednik cyfrowy w tablicy ascii wiec mamy liczbe i trzeba do niej dodac wartosc ktora wyjdzie z obliczen
  3. nastepnie musimy zamienic to znow na string (tego juz nie wiem jak xDD) i wysyłamy do Serwera

Deszyfrowanie

  1. Mamy stringa ktory przyszedl przez socket zamieniamy go na tablice stringow poteam zamieniamy na bajty i odejmujemy wartosc ktora wyjdzie z obliczen
  2. Zamieniamy znów z bajtow na stringa i mamy odszyfrowana wiadomosc

Pytanie do was takie czy takie cos po 1 zadziała bo po długich mękach nic mi nie wychodzi mam cos w stylu szablonu lecz on działa źle i nie wiem co mi odwaliło że cos takiego napisałem xDDD to jest to btw. https://github.com/Prank866/ElGamal-ByPrank3 (importowanie selenium to przypadek)

Jezeli to zadziała to dajcie mi znac jezeli nie to moze ktos mi podsunie jakis pomysl bo ze tak powiem z kartki na kod komputerowy jest troche ciężej :)

A i takie pytanie czy jezeli w 1 serwerze implementuje 2 ServerScokety i 2 Sockety aby przez jeden socket przesylac wiadomosci string a przez drugi pliki to to jest naturalne rozwiązanie czy błąd niewybaczalny w programowaniu ?

0

o Panie złoty, zacząłbym od formatowania kodu, za dużo pustych linijek :P

nastepnie musimy zamienic to znow na string (tego juz nie wiem jak xDD) i wysyłamy do Serwera

tego kroku nie rozumiem, Stringa się nie wysyła, tylko byte[]

a to co jest? https://github.com/Prank866/ElGamal-Szyfrowanie/blob/main/Klient1/src/Klient.java#:~:text=if%20(wiadomoscDlaSerwera%20!%3D%20%22%22)

i czemu chcesz to robić na threadach? :|

0
trojanus napisał(a):

tego kroku nie rozumiem,

Jesli w ogóle coś rozumiesz, top jesteś lepszy ode mnie

Prank866 napisał(a):
  1. a mianowicie chciałbym aby funkcja szyfrująca zamieniała stringa na bajty za pomoca zamienienia stringa na tablice stringow
  2. pozniej kazdy element ma swoj odpowiednik cyfrowy w tablicy ascii wiec mamy liczbe i trzeba do niej dodac wartosc ktora wyjdzie z obliczen

Nie mam siły / chęci wczytywać się, ale to brzmi jak recepta na "naiwny algorytm"

0

@Prank866: z ciekawości spojrzałem w serwer... litości

        Thread thread1 = new Thread(() -> {


            while (true){
                try {


                    //wysyłanie
                    PrintWriter pWriter = new PrintWriter(socket.getOutputStream());
                    Scanner scannerZnakow = new Scanner(System.in);
                    String wiadomoscDlaKlienta = scannerZnakow.nextLine();

                    if (wiadomoscDlaKlienta == "") {

                        //wysyłanie pliku
                        System.out.println("Podaj sciezke do pliku: ");
                        String str = scannerZnakow.nextLine();
                        if(str == ""){
                            System.out.println("Podaj poprawną sciezke! ");
                        }else{
                            FileInputStream fis = new FileInputStream(str);
                            byte[] bytes = new byte[4096];
                            OutputStream os = socketForFIles.getOutputStream();
                            System.out.println("Wysyłanie...");
                            fis.read(bytes, 0, bytes.length);
                            os.write(bytes, 0, bytes.length);
                            os.flush();

                            System.out.println("Wysyłanie pliku zakonczone !");
                        }

                    }else{
                        pWriter.println("" + wiadomoscDlaKlienta);
                        pWriter.flush();
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                    try {
                        socket.close();
                        serverSocket.close();
                        serverSocketForFiles.close();
                        socketForFIles.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }


        });

jest sobie thread, w nim masz while(true) potem try-catch i w catchu masz kolejny try-catch ?
już pomijam tego nieszczęsnego if-a w którym porównujesz referencję a nie wartość

zrób to na jednym wątku, wydziel do osobnych metod, skorzystaj może z CompletableFuture? choć będzie to i tak overkill dla tego kodu

no i do testowania, postaw sobie ten serwer na Tomcacie i strzelaj po ludzku GETami/POSTami

na razie zostaw szyfrowanie, to będzie jedna metoda

1 użytkowników online, w tym zalogowanych: 0, gości: 1