Bartosz B. schrieb:
> mit _getwch() funktioniert alles.
_getwch ist eine Windowsspezifische non-standard funktion, selbes gillt
für _getch. Und getch ist normalerweise eine curses funktion, curses ist
eine Library für Konsolenprogramme. Die Standardfunktion im c standard
zum Lesen eines Zeichens ist getchar. Alternativ kann man auch getc und
fread nutzen. Auf POSIX compatiblen systemen ist ausserdem die
Verwendung von "read" möglich. Wenn man mit diesen ein Passwort einlesen
will, sollte man aber erst das terminal echo ausschalten. Auf posix
systemen macht man das über das ECHO flag mit tcsetattr (termios).
Ausserdem sollte aus Sicherheitsgründen wenn möglich nicht von stdin,
sondern vom controling terminal gelesen werden. Ausserdem kann es je
nach threat model sinn machen, secure memory zu verwenden (speicher, der
im idealfall nicht geswappt werden kann und beim free genullt wird. Eine
implementation wäre gcry_malloc_secure.). Windows kocht überall halt wie
immer sein eigenes Süppchen, mit dem winapi mist. Ich empfehle ein
richtiges OS zu verwenden, nicht so ein proprietäres frickelsystem wie
Windows.
Besser währe eventuell noch, gleich die vorgesehenen Funktionen dafür zu
nehmen, statt das selber zu machen. Die POSIX Standardfunktion zum
einlesen von Passwörtern ist getpass. Unter BSD gibt es das verbesserte
readpassphrase.
Wenn möglich ist die Verwendung von pam zur Authentifizierung zu
bevorzugen. http://man7.org/linux/man-pages/man3/pam.3.html
Jenachdem kann es gar sinvoll sein, Programme wie su zu verwenden.
Bei Terminals ist es ausserdem unüblich, die Anzahl eingegebener Zeichen
mit Sternchen anzuzeigen. Das ist ein Sicherheitsaspeckt, wenn man die
Passwortlänge kennt, ist es schon um einiges leichter, das Passwort zu
erraten.