2012-02-08 17 views
107

¿Sabe cómo en Linux cuando prueba algo de Sudo le dice que ingrese la contraseña y, mientras escribe, no se muestra nada en la ventana del terminal (no se muestra la contraseña)?Obteniendo entrada de contraseña de línea de comando en Python

¿Hay alguna manera de hacerlo en Python? Estoy trabajando en un script que requiere información tan sensible y me gustaría que se oculte cuando lo estoy escribiendo.

En otras palabras, quiero obtener la contraseña del usuario sin mostrar la contraseña.

Respuesta

171
+0

va a funcionar, pero ¿cómo se puede tener cuidado de un "hacker" que hará una copia del guión y luego comentar la línea eso requiere una contraseña de usuario? – asf107

+81

@ asf107: si el pirata informático puede editar el código fuente, hay otros problemas de los que preocuparse. – DSM

+6

@ asf107 - La idea detrás de solicitar una contraseña es que pueda pasarla para autenticarse con algo (IE, estoy usando esto para solicitar una contraseña para autenticarse con un servidor en línea). Si un hacker ha comentado la línea, el programa simplemente fallaría porque el servidor ya no se autenticará. La idea detrás de usar 'getpass()' es para que nadie pueda ver el código fuente y averiguar su contraseña con solo leerlo, y nadie puede obtener su contraseña simplemente mirando por encima del hombro y leyendo su contraseña de la pantalla cuando escríbalo. – ArtOfWarfare

15

Utilice getpass para este fin.

getpass.getpass - solicitar al usuario una contraseña sin reflejar

76
import getpass 

pswd = getpass.getpass('Password:') 

Esto funciona en Linux, Windows y Mac.

+1

Bueno, ya que aparentemente agregar un sistema operativo es [dirigirse al autor] (http://stackoverflow.com/review/suggested-edits/15845407) de la publicación, solo mencionaré aquí que funciona en Mac Sistema operativo también. – JakeD

1
import getpass 
p=str("null") #user's input start value 
pas=str("password") #password value 
while p!=pas: 
    p=getpass.getpass("Insert your password: ") #password input 
print("ay") #when you get the password, the output is "ay" 
+8

Debe leer [PEP 8] (https://www.python.org/dev/peps/pep-0008/) –

2
import sys 
import msvcrt 

passwor = '' 
while True: 
    x = msvcrt.getch() 
    if x == '\r': 
     break 
    sys.stdout.write('*') 
    passwor +=x 

print '\n'+passwor 

este código se imprime astrix en lugar de cada letra

+1

esto es solo Windows pero al menos no repite la respuesta 'getpass'. Bueno –

Cuestiones relacionadas