python passwords masking raw-input

Enmascarar la entrada del usuario en python con asteriscos



passwords masking (4)

Dependiendo del sistema operativo, la forma en que obtiene un solo carácter de la entrada del usuario y cómo verificar el retorno de carro será diferente.

Ver esta publicación: Python leyó un solo personaje del usuario

En OSX, por ejemplo, podría hacer algo como esto:

import sys, tty, termios def getch(): fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch key = "" sys.stdout.write(''Password :: '') while True: ch = getch() if ch == ''/r'': break key += ch sys.stdout.write(''*'') print print key

Estoy tratando de enmascarar lo que el usuario escribe en IDLE con asteriscos para que las personas que lo rodean no puedan ver lo que están escribiendo / han escrito. Estoy usando información básica básica para recopilar lo que escriben.

key = raw_input(''Password :: '')

Indicador IDLE ideal después de que el usuario ingrese la contraseña:

Password :: **********


Descargo de responsabilidad: no proporciona el asterisco en la terminal, pero lo hace en jupyter notebook.

El código siguiente reemplaza los caracteres escritos con asteriscos y permite la eliminación de caracteres mal escritos. El número de asteriscos refleja el número de caracteres escritos.

import getpass key = getpass.getpass(''Password :: '')

Y después de que el usuario presione enter:


Para resolver esto, escribí este pequeño módulo pyssword para enmascarar la contraseña de entrada del usuario en el indicador. Funciona con ventanas. El código está abajo:

from msvcrt import getch import getpass, sys def pyssword(prompt=''Password: ''): '''''' Prompt for a password and masks the input. Returns: the value entered by the user. '''''' if sys.stdin is not sys.__stdin__: pwd = getpass.getpass(prompt) return pwd else: pwd = "" sys.stdout.write(prompt) sys.stdout.flush() while True: key = ord(getch()) if key == 13: #Return Key sys.stdout.write(''/n'') return pwd break if key == 8: #Backspace key if len(pwd) > 0: # Erases previous character. sys.stdout.write(''/b'' + '' '' + ''/b'') sys.stdout.flush() pwd = pwd[:-1] else: # Masks user input. char = chr(key) sys.stdout.write(''*'') sys.stdout.flush() pwd = pwd + char


Si desea una solución que funcione en Windows / macOS / Linux y en Python 2 y 3, puede instalar el módulo stdiomask :

pip install stdiomask

A diferencia de getpass.getpass() (que se encuentra en la Biblioteca estándar de Python), el módulo stdiomask puede mostrar caracteres de máscara *** mientras escribe.

Ejemplo de uso:

>>> stdiomask.getpass() Password: ********* ''swordfish'' >>> stdiomask.getpass(mask=''X'') # Change the mask character. Password: XXXXXXXXX ''swordfish'' >>> stdiomask.getpass(prompt=''PW: '', mask=''*'') # Change the prompt. PW: ********* ''swordfish'' >>> stdiomask.getpass(mask='''') # Don''t display anything. Password: ''swordfish''

Más detalles en https://pypi.org/project/stdiomask/