Estoy escribiendo un programa de consola con Python en Windows.
El usuario necesita iniciar sesión para usar el programa, cuando ingresa su contraseña, me gustaría que se repita como "*", mientras que puedo obtener lo que el usuario ingresa.
Encontré en la biblioteca estándar un módulo llamado getpass, pero no hará eco cuando ingresas (como linux).
Gracias.¿Cómo se lee la contraseña con echo "*" en el programa de la consola Python?
Respuesta
El módulo getpass
está escrito en Python. Podrías modificarlo fácilmente para hacer esto. De hecho, aquí es una versión modificada de getpass.win_getpass()
que usted podría pegar en su código:
import sys
def win_getpass(prompt='Password: ', stream=None):
"""Prompt for password with echo off, using Windows getch()."""
import msvcrt
for c in prompt:
msvcrt.putch(c)
pw = ""
while 1:
c = msvcrt.getch()
if c == '\r' or c == '\n':
break
if c == '\003':
raise KeyboardInterrupt
if c == '\b':
pw = pw[:-1]
msvcrt.putch('\b')
else:
pw = pw + c
msvcrt.putch("*")
msvcrt.putch('\r')
msvcrt.putch('\n')
return pw
Es posible que desee volver a examinar esto, sin embargo. La forma de Linux es mejor; incluso el solo hecho de saber la cantidad de caracteres en una contraseña es una pista importante para alguien que quiere descifrarlo.
You can use the getpass
module. Esto no responde exactamente la pregunta porque la función getpass no arroja nada a la consola a excepción del aviso. La razón de esto es que es una capa adicional de seguridad. Si alguien está mirando por encima de su hombro, no podrán averiguar cuánto tiempo es su contraseña.
Aquí hay un ejemplo de cómo se usa:
from getpass import getpass
getpass('Enter your password: ')
Este ejemplo mostrará el mensaje "Introduzca su contraseña:" y entonces usted puede escribir su contraseña.
'getpass' se mencionó en la pregunta original y se rechazó porque no refleja los asteriscos. – kindall
La respuesta de kindall está cerca, pero tiene problemas con el retroceso que no borra los asteriscos, así como con el retroceso que puede ir más allá del mensaje de entrada.
Probar:
def win_getpass(prompt='Password: ', stream=None):
"""Prompt for password with echo off, using Windows getch()."""
if sys.stdin is not sys.__stdin__:
return fallback_getpass(prompt, stream)
import msvcrt
for c in prompt:
msvcrt.putwch(c)
pw = ""
while 1:
c = msvcrt.getwch()
if c == '\r' or c == '\n':
break
if c == '\003':
raise KeyboardInterrupt
if c == '\b':
if pw == '':
pass
else:
pw = pw[:-1]
msvcrt.putwch('\b')
msvcrt.putwch(" ")
msvcrt.putwch('\b')
else:
pw = pw + c
msvcrt.putwch("*")
msvcrt.putwch('\r')
msvcrt.putwch('\n')
return pw
Nota mscvrt.putwch no funciona con Python 2.x, es necesario utilizar mscvrt.putch lugar.
- 1. ¿Cómo se lee una clave cifrada con contraseña con java?
- 2. Python: UnicodeEncodeError cuando se lee de la entrada estándar
- 3. ¿Cómo se evita que la consola se cierre después de que el programa finalice en C?
- 4. ¿Cómo se lee app.config en el nivel dll?
- 5. ¿Cómo se recarga la fuente de Python en la ventana de la consola en Eclipse/Pydev?
- 6. ¿Cómo se lee una entrada muy larga desde la consola en C#?
- 7. ¿Cómo se lee la sección AppSettings en el archivo web.config?
- 8. ipython lee la versión incorrecta de Python
- 9. ¿Cómo suprimir la salida de la consola en Python?
- 10. ¿Cómo obtengo la salida de la consola en C++ con un programa de Windows?
- 11. ¿Cómo comprobar si el programa se ejecuta desde una consola?
- 12. ¿Cómo se lee el número de cargos de la batería?
- 13. Python - Reescribe múltiples líneas en la consola
- 14. ocultar la ventana de la consola de un programa C
- 15. ¿Cómo se lee la temperatura de la GPU (tarjeta gráfica)?
- 16. Pausando la consola de Python
- 17. Ocultando la ventana de la consola de la aplicación Python GUI con py2exe
- 18. ¿Cómo ejecutar los programas de la consola hija sin mostrar la ventana de consola desde el programa GUI de Win32?
- 19. Insertar pulsaciones de teclas en la consola Linux desde Python
- 20. Borrado seguro de la contraseña en la memoria (Python)
- 21. UIWebview se bloquea con el siguiente mensaje en la consola
- 22. ¿Cómo se lee el búfer de protocolo GTFS en PHP?
- 23. ¿Cómo se lee JavaDoc?
- 24. ¿Cómo se cambia la contraseña de ActiveAdmin?
- 25. Redirige la salida de la consola al cuadro de texto en el programa separado
- 26. ¿Cómo se restablece la contraseña de SA?
- 27. ¿Cómo echo cadenas con el comando bash más en Perl?
- 28. ¿Cómo escribir un programa de consola de Python puede salir como el comando superior en Linux?
- 29. ejecutar el programa en Python shell
- 30. Problema con 'StringVar' en el programa Python
msvcrt.putch ('\ b') parece que esto no funciona – wong2