Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich versuche gerade in einem Komandozeilen-Prog eine Passwort eingabe zu basteln, bei der statt der Eingabe nur Sternchen erscheinen. Bei der Suche im Forum bin ich auf die Antwort gestoßen, das sei nicht möglich, da java auf die Art der Konsoleneingabe keinen Einfluß hat.
Das ist nicht ganz richtig, denn mann muss nicht unbedingt die Eingabe verändern, hier würde es ja auch genügen das gelesene byte auf dem bildschirm mit * zu überschreiben.
Leider hab ich keine Ahnung, wie man das mit dem überschreiben hinbekommt. Wenn also jemand weis, wie man Konsolentext überschreiben kann, bitte her mit der Lösung
PS: Hab grad gesehen, dass es mal im Thema Unsichtbares Passwort ein Link zu nem alten Sun Artikel zu diesem Thema gab. Leider ist der Link nichtmehr aktuell, zeigt aber, dass es wohl gehen muss.
Trick dort:
Ausgabe von "\r" löscht die aktuelle Zeile, wenn man dann wieder die Eingabeaufforderung ausgibt siehts aus wie vorher,
egal was vom Nutzer bereits eingegeben wurde (bis auf Enter)
wenn man das in einem Thread nebenbei sehr oft macht wird man wahrscheinlich die eingegebenen Zeichen nie zu Gesicht bekommen,
unabhängig vom ständigen Überschreiben der Zeile wird aber der Inhalt des Streams des System.in.read() nicht angetastet,
es gilt immer noch: solange bis Enter gedrückt wird weiß man nicht ob, wieviele und welche Zeichen gedrückt wurden,
man kann also (zumindest mit diesem Verfahren) unmöglich eine entsprechende Anzahl Sternchen ausgeben,
das Verfahren setzt auch darauf dass man mit \r wirklich zum Zeilenanfang zurückspringt,
muss nicht unbedingt so sein, in meinem Eclipse-Konsolenfenster zum Beispiel ist das ein Zeilenumbruch
während es in der Windows-Konsole funktioniert
---------
Also, das funktioniert zwar einigermaßen mit dem überschreiben, aber wirklich toll ist das nicht :?
Mir ist jetzt die Idee gekommen, statt vom System.in von einem selbstgeschriebenen InputSteam das Passwort einzulesen, der genau so funktioniert wie der System.in, nur dass er statt der gelesenen Zeichen immer ein Sternchen ausgibt. Da ich annehme, dass man auf jeden fall die read-Funktionen überschreiben muss, ich aber keine Ahnung habe, wie genau, sieht mein Code im Moment in etwa so aus:
Code:
public class PasswordInputStream extends InputStream
{
public int read() throws IOException
{
return 0;
}
public int read(byte[] buf) throws IOException
{
int bytesRead = super.read(buf);
for (int i = 1; i <= bytesRead; i++)
System.out.print("*");
return bytesRead;
}
public int read(byte[] buf, int off, int len) throws IOException
{
int bytesRead = super.read(buf, off, len);
for (int i = 1; i <= bytesRead; i++)
System.out.print("*");
return bytesRead;
}
}
Wie man sieht, tappe ich gerade völlig im Dunkeln. Kann mir einer helfen?