Saltar al contenido

Enmascarar la entrada del usuario en python con asteriscos

Estate atento ya que en este tutorial vas a encontrar la solución que buscas.Esta reseña fue probado por nuestros expertos para garantizar la calidad y veracidad de nuestro post.

Solución:

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

pip install stdiomask

A diferencia de getpass.getpass() (que se encuentra en la biblioteca estándar de Python), el stdiomask El módulo puede mostrar caracteres de máscara *** a medida que 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'

Desafortunadamente, este módulo, como el integrado de Python getpass módulo, no funciona en IDLE o Jupyter Notebook.

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

Para resolver esto, escribí este pequeño módulo pyssword para enmascarar la contraseña de entrada del usuario en el aviso. 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

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.

Vea esta publicación: Python lee un solo carácter del usuario

En OSX, por ejemplo, podrías 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

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *