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?
Hola n1sendev, (https://underc0de.org/foro/profile/n1sen/)
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:
#!/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:
#!/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 passwords.py
Enter your password: *************
password is:
> 'Mortal_Poison'
Puedes ver más información en la documentación de Python de las funciones usadas
aquí. (https://docs.python.org/3/library/msvcrt.html#msvcrt.getwch)
Como te mencioné, no es de hacerlo en una línea, lleva un proceso. Espero y te haya servido....
Un saludo.
[/font]
Gracias, se me fue decir el lenguage de programacion xD