Sto cercando di capire come richiedere una password, e hanno l'ingresso degli utenti eco indietro come asterischi (********
)Come avere la password eco come asterischi
Così di recente, ho preso il progetto di creazione di un server remoto che potrebbe essere connesso all'utilizzo del modulo socket in Python. Non è ancora stato fatto, dato che sono in procinto di rendere la console utilizzata per connettersi al server.
Sto provando a creare una finestra di accesso in cui viene richiesto all'utente di immettere il nome utente e la password, anche se quando viene immessa la password cerco asterischi da stampare, ad esempio l'immissione di una password comune (ad esempio: Sekr3t è echo'd come: * * * * * *).
Dopo giorni di ricerche su di esso, ho quasi finito, ma c'è ancora un ultimo errore che mi sta facendo impazzire (non sono completamente in grado di risolverlo). Nota - So che c'è un modulo getpass che potrebbe essere usato per rimpiazzarlo, con molta più facilità, ma nulla di echo non è esattamente quello che sto cercando.
Ecco il codice di password di accesso che ho finora, e io non riesco a capire il motivo per cui non eco asterischi:
import msvcrt
import sys
def login(prompt = '> '):
write = sys.stdout.write
for x in prompt:
msvcrt.putch(x)
passw = ""
while 1:
x = msvcrt.getch()
if x == '\r' or x == '\n':
break
if x == '\b':
# position of my error
passw = passw[:-1]
else:
write('*')
passw = passw + x
msvcrt.putch('\r')
msvcrt.putch('\n')
return passw
>
Se avete letto attraverso il codice e/o eseguito attraverso qualcosa come IDLE, si potrebbe notare che quando l'utente back-space è, i dati memorizzati vengono cancellati da un carattere, ma gli asterischi stampati non lo sono. vale a dire - Sekr3t + backspace = Sekr3, tuttavia * * * * * * è lasciato echo'd. Sarebbe molto gradito qualsiasi aiuto su come cancellare l'ultimo asterisco quando viene inserito backspace. Inoltre, un sacco di questo codice proviene dal modulo getpass. So che non è una gran bella spiegazione, e probabilmente non è un granché di codice, ma sto ancora imparando - per favore portami dietro.
Si dovrebbe considerare l'utilizzo di [ 'getpass()'] (http://docs.python.org/library/getpass.html#getpass. getpass). Mi rendo conto che hai già trovato questo, ma non riecheggiare nulla in realtà ** migliora la sicurezza **. – ThiefMaster
@ThiefMaster Riesco a vedere come migliorerebbe la sicurezza, ma l'applicazione è principalmente per alcuni dei miei amici in una delle mie reti di gioco che non sono molto abituate al computer, quindi sto provando a farlo da qualche parte tra e user-friendly - è per questo che ho scelto di provare a fare eco gli asterischi anziché nulla. –
Controlla il modulo 'curses' –