szyfrowanie RSA

0

Mam do zrobienia projekt, który polega na wykonaniu programu do szyfrowania RSA. Niestety póki co utknąłem na sprawdzeniu czy dwie wybrane przez użytkownika liczby są pierwsze. Próbowałem to zapisać na wiele różnych sposobów, niestety ciągle jest jakiś problem. Np. wygląda na to, że program w pętli domaga się wpisywania liczby raz za razem, bez wyświetlania komunikatu. Nie wiem z jakiego powodu tak się dzieje, mam nadzieję, że ktoś będzie mógł mi to wytłumaczyć.

import java.util.Scanner;

public class Szyfrowanie_RSA 
{
    public static void main(String[] args) 
    {
        System.out.print("p = ");
        Scanner sc = new Scanner(System.in);
        while(! sc.hasNextInt() || sc.nextInt() < 2)
        {
            System.out.println("To nie jest liczba pierwsza.");
            System.out.print("Podaj liczbe pierwsza: ");
            sc.next();
        }
        int p, a, b, i;
        do
        {
            p = sc.nextInt();
            a = 1;
            b = 1;
            for(i = 2; i < p; i++)
            {
                if(p % i == 0) 
                {
                    b = 0;
                }
            }
            if(b == 0) 
            {
                a = 0;
                System.out.println("To nie jest liczba pierwsza.");
                System.out.print("Podaj liczbe pierwsza: ");
                sc.next();
            }
        } while(a == 0);
        System.out.println("p = " +p);
        
        System.out.print("q = ");
        sc = new Scanner(System.in);
        while(! sc.hasNextInt() || sc.nextInt() < 2)
        {
            System.out.println("To nie jest liczba pierwsza.");
            System.out.print("Podaj liczbe pierwsza: ");
            sc.next();
        }

        int q; 
        do
        {
            q = sc.nextInt();
            a = 1;
            b = 1;
            for(i = 2; i < q; i++)
            {
                if(q % i == 0) 
                {
                    b = 0;
                }
            }
            if(b == 0) 
            {
                a = 0;
                System.out.println("To nie jest liczba pierwsza.");
                System.out.print("Podaj liczbe pierwsza: ");
                sc.next();
            }
        } while(a == 0);
        System.out.println("q = " +q);
        
        int n = p * q;
        int e;
    } 
}
0

Ja tu widze jakiś jeden wielki copypaste i jedną metodę. Tak to ty tego RSA nie napiszesz.

  1. Naucz sie podstaw programowania
  2. Podziel to na małe funkcje. Zrób osobną funkcję do sprawdzania czy dana liczba jest pierwsza.
  3. Generalnie w RSA to nie użytkownik podaje liczbę pierwszą, tylko podaje jak duża ma być (ile ma mieć bitów) a program tą liczbę generuje. Jak ty sobie wyobrażasz podanie do programu jakieś 1024 bitowej liczby? o_O Wiesz jaka to jest duża liczba?
0

A nie prościej skorzystać w pakietu security? Masz tam wszystkie klasy i interfejsy które będą Ci do tego potrzebne. Dawno jej nie używałem, ostatni raz w projekcie który pisałem na studiach a to było bardzo dawno więc już dokładnie nie pamiętam ale jak wygrzebię gdzieś projekt to wrzucę fragment. Chyba że Twój projekt ma jakieś konkretne wymagania jakie musisz spełnić. Ogólnie poczytaj sobie trochę tu: https://docs.oracle.com/javase/7/docs/api/java/security/package-summary.html

Na pewno przydatna będzie Ci klasa: SecureRandom, Key, KeyPair, KeyPairGenerator

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