2009-07-10 7 views
9

Próbuję ukryć hasło w Javie. Sun Java zaproponował sposób maskowania hasła w następujący sposób.Jak zamaskować hasło w Java 5?

Masking a password

Wykorzystuje ona prosty sposób aby to zrobić.

public void run() { 
    stop = true; 
    while (stop) { 
    System.out.print("\010*"); 
try { 
    Thread.currentThread().sleep(1); 
    } catch(InterruptedException ie) { 
     ie.printStackTrace(); 
    } 
    } 
} 

Ale to podejście ma kilka wad.

  1. Jeśli użytkownik korzysta z klawiszy strzałek i klawiszy usuwania, hasło zostaje ujawnione.

  2. Jeśli użytkownik przypadkowo naciśnie 2 klawisze w tym samym czasie (bardzo duża prędkość pisania) niektóre znaki nie zostaną zamaskowane.

Czy myślicie w jaki sposób można uzyskać 100% poprawne maskowanie?

Odpowiedz

4

Możesz teraz użyć System.console();

Console c = System.console(); 
if (c == null) { 
    System.err.println("No console."); 
    System.exit(1); 
} 


char [] password = c.readPassword("Enter your password: "); 
+1

java.io.Console jest dostępny tylko w języku Java 6. Jego pytanie wskazuje, że jest on przy użyciu Java 5. – piepera

1

Korzystanie z niektórych systemów (w systemach Windows i Unix) umożliwia wyłączenie echo znaków na konsoli. To właśnie robi System.console(), ale działa również w Javie.

używam JNA do mapowania pewnego syscall UNIX i Windows w prywatnym oddziale jline:

Jeśli potrzebujesz kodu przykład zostaw komentarz.

0

W JDK 6.0 dostępne są źródła klas javy, w tym konsola: Właśnie zweryfikowaliśmy i ta klasa ma tylko zależności Java 5.0.

W projekcie można więc utworzyć kopię tej klasy konsoli, a następnie użyć metody readPassword. Nie próbowałem, ale powinno działać.

+0

Nie całkiem prawda. Metoda echo() jest rodowitym metoda. – notnoop