kodowanie hasla

0

Nie do końca wiem jak nazwać ten temat, lecz mam problem z taka dość banalną pewnie rzecza.
Chce napisać proste logowanie w javie, w sumie je napisałem, jednak chciałbym by hasło było kodowane najlepiej gwiazdkami czy innym badziewiem.

Przeglądając internet widzę, iż do tego celu używa się tablicy znaków, jednak tu się rodzi mój problem( dam fragm kodu):

 console.printf("Podaj login: ");
                String login = console.readLine();
                
             
console.printf("Podaj haslo: ");
               char [] h= console.readPassword();
                String haslo = new String(h);

W przypadku loginu jest ok, w przypadku hasla pojawia się błąd typu java.lang.NullPointerException i nie wiem jak go obejść.

Skąd się bierze haslo?
Logowanie logowanie = new Logowanie("admin", "admin");
Jest ustalane w konstruktorze klasy logowanie.

Jak usunac blad z nulem? Moze nie trzeba uzywac tablicy , a jest inne rozwiazanie by generowac gwiazdki jako haslo?

0

GDZIE ci ten wyjątek leci. Bo akurat kod który pokazałeś jest ok.

0

Dokładnie linie z podawaniem login/haslo

public void start(){
		

		Logowanie logowanie = new Logowanie("admin", "admin");
		

        while(true){
            try {
            	Console console = System.console();
 
                console.printf("Podaj login: ");
                String login = console.readLine();

                console.printf("Podaj haslo: ");
                char [] h= console.readPassword();
                 String haslo = new String(h);
                
                if(login.equals(logowanie.login) && haslo.equals(logowanie.haslo)){
                    System.out.println("Poprawne dane. Zostałeś zalogowany.");
                    break;
                }else{
                    System.out.println("Login lub hasło jest błędne. Spróbuj jeszcze raz!\n");
                    continue;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
		
}
0
String haslo = new String(console.readPassword("Podaj haslo: "));
0

Jeszcze brakuje kodu klasy Logowanie.

0

@po takiej zmienie blad i tak wystepuje
jest on w petli ..?

public class Logowanie {
    public String login;
    public String haslo;
    public Logowanie(String login, String haslo){
        this.login = login;
        this.haslo = haslo;
    }
}
0

Kod jest poprawny i działa, pewnie korzystasz z innej klasy Logowanie.

0

kurde po twoich słowach zrobiłem nawet nowy projekt i wklełem tam klase logowanie i klase start zeby sprawdzic ale jest to SAMO..
nie mam innej klasy logowanie?

pokazuje na ta linie:

console.printf("Podaj login: ");
0

Słabo mi. Weź chłopie wstaw tam breakpointa, uruchom debuger i zobacz gdzie masz nulla. Albo kliknij w stacktrace i też będziesz wiedział GDZIE jest null.
edit: google mówi że System.console() może być nullem jeśli nie ma konsoli i eclipse czasem tak robi ;]

0

Przecież napisałeś

W przypadku loginu jest ok
. Bez tego zdania sytuacja byłaby jasna od początku.

0

sprawdziłem w google jak zrobić ten breakpoint i debug, wychodzi że console = null
teraz wypada to zmienić, spróbowałem przed pętlą ustanowić Console console = null; i warunek

 if (console != null) {

lecz to chyba nie w tym rzecz.

@wydawało mi się iż login jest ok, ale wtedy nie korzystał z console dlatego nie było bledu

tego nulla się wyłącza jakimś guzikiem w takim razie?oO

0

Jak chcesz uruchamiać program w Eclipse, to nie możesz korzystać z klasy Console.

0

to w takim razie jest jakiś inny sposob zeby zagwiazdkowac haslo? (jakikolwiek) ma byc WIDAC gwiazdki przy wpisywaniu scanerem

0

W GUI jest coś takiego: password.setEchoChar('*');
czy w wersji tekstowej też możliwe jest coś takiego?

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