[SOLUCIONADO]Transformar caracteres introducidos por teclado por "****"?

Iniciado por n1sendev, Noviembre 13, 2017, 07:58:42 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Vengo a molestar preguntando como Como transformar caracteres introducidos por teclado por otros caracteres?
Me refiero, estas escribiendo "hola" pero envez de mostrar "hola" mientras escribes, muestra "****" en su remplazo, y esos asteriscos depende segun la longitud de la palabra introducida.
Saludos y gracias

No he entendido bien la pregunta, en qué lenguaje quieres hacerlo?
O es para que salga siempre?
Por que otros caracteres quieres que se modifique?
RollthBuen hacker mejor No tienes permitido ver los links. Registrarse o Entrar a mi cuenta/No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Noviembre 14, 2017, 01:13:50 PM #2 Ultima modificación: Noviembre 14, 2017, 01:15:24 PM por Mortal_Poison

Hola No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Se torna complicado de manera portátil, debido a que deberías cambiar como se muestra el echo con uso de API's específicas. Si usas Unix, puedes usar la librería de curses, pero por ejemplo, esta no es multiplataforma.

Sin embargo, está getpass() la cual sí que es multiplataforma y mira el siguiente ejemplo:

Código: python

#!/usr/bin/python
# -*- coding: utf-8 -*-
import getpass   
my_pwd = getpass.getpass(stream=None)
print(my_pwd)


La salida será:
Password:
Mortal_Poison


No se te mostrará la contraseña a medida que la introduces, pero al final si lo hará por el print.
Como tu pregunta iba enfocada a cómo hacerlo, lo he hecho rápidamente en Python 2.7, sin embargo, lo puedes adaptar a las versiones 3.x:

Código: python

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, msvcrt

# Función para obtener nuestra contraseña y además, ocultar los caracteres.
def pass_convert(prompt = 'Enter your password: ', hideChar = ' '):
    # Contador e inicialización de variables.
    count = 0
    password = ''
     
    for chararacter_to_get in prompt:
        msvcrt.putch(chararacter_to_get) # Obtenemos los caracteres de nuestra cadena recibida, es decir, nuestra contraseña.

    # Creamos loop infinito
    while True:
       
        # Leemos la pulsación de las teclas y nos devuelve el carácter resultante como una cadena de bytes.
        char_get = msvcrt.getch()
       
        # Condicionamos para los saltos de linea e indentaciones.
        if char_get == '\n' or char_get == '\r':
            break

        # Como getch() no funciona con ctrl+c, realizamos el mismo procedimiento.
        if char_get == '\003':
            raise KeyboardInterrupt

        # Retroceso ASCII.
        if char_get == '\b':
            count -= 1
            # Cortamos la cadena para omitir el último carácter.
            password = password[:-1]
            # Si nuestro contador es mayor que 0...
            if count >= 0:
                # No almacenamos el búfer e imprimimos la cadena de bytes char.
                msvcrt.putch('\b')
                msvcrt.putch(' ')
                msvcrt.putch('\b')     
        else:
            if count < 0:
                count = 0
            # Lo que hacemos aquí ya es poner nuestros respectivos carácteres cuando escribimos.
            count += 1
            password += char_get
            msvcrt.putch(hideChar)

    # Retorno de carro y salto de línea.
    print("\r\n")
   
    # Retornamos nuestra contraseña siempre y cuando nuestra contraseña sea diferente de " ".
    return "'%s'" % password if password != '' else "''"

# Indicamos qué carácter queremos que se muestre a medida que ingresamos nuestra contraseña.
password = pass_convert(hideChar = '*')
# Mostraremos nuestra contraseña final, sin los asteriscos.
print('password is:' + '\n> ' + password)


La salida será de tipo:

E:\>python No tienes permitido ver los links.
 Registrarse o Entrar a mi cuenta
Enter your password: *************
password is:
> 'Mortal_Poison'



Puedes ver más información en la documentación de Python de las funciones usadas No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como te mencioné, no es de hacerlo en una línea, lleva un proceso. Espero y te haya servido....

Un saludo.
[/font]
Become the change you seek in the world. -Gandhi.