¿Ocultar y cifrar contraseñas en Python?

Hay varios módulos de Python que se usan para ocultar la contraseña ingresada por el usuario, entre ellos uno es el módulo maskpass() . En Python, con la ayuda del módulo maskpass() y el módulo base64() , podemos ocultar la contraseña de los usuarios con asterisco (*) durante el tiempo de entrada y luego, con la ayuda del módulo base64(), se puede cifrar.

pase de máscara()

maskpass() es un módulo de Python que se puede usar para ocultar las contraseñas de los usuarios durante el tiempo de entrada. Los módulos maskpass() también proporcionan una forma segura de manejar la solicitud de contraseña donde los programas interactúan con los usuarios a través de la terminal.

Instalación:

Use pip para instalar maskpass en el símbolo del sistema.

pip install maskpass

Estos módulos tienen 2 tipos de funciones/métodos:

  • pedir pase()
  • advpass()

pedir paso():

askpass usa la biblioteca estándar para obtener entradas sin bloqueo y devuelve la contraseña.

import maskpass
pwd = maskpass.askpass()

La ejecución del código anterior devolverá la contraseña ingresada en un formato de string. Hay 2 argumentos opcionales en el método askpass(), que son ‘prompt’ y ‘mask’. El valor predeterminado para el aviso es ‘Ingresar contraseña:’ y el valor predeterminado para la máscara es asterisco (*).

Nota: si desea enmascarar su contraseña con una string, un número o un símbolo, simplemente pase ese valor en la máscara. Por ejemplo, si desea enmascarar su contraseña con el hashtag (#), pase el hashtag en la máscara, es decir, mask = «#», ahora, cuando el usuario ingrese la contraseña, esa contraseña se ocultará con el hashtag (#).  

Ejemplo 1: sin hacer eco de la contraseña de un usuario en un aviso

Python3

# User's password without echoing
import maskpass  # to hide the password
 
# masking the password
pwd = maskpass.askpass(mask="") 
print(pwd)

Producción:

F:\files>python password.py
Enter Password :
greeksforgreeks

En el ejemplo anterior, la contraseña del usuario no se repite en un aviso al ingresar la contraseña porque el valor asignado en la máscara es nulo , es decir, máscara = «» (sin espacios), por lo tanto, la contraseña está oculta sin ninguna string, símbolo.

Ejemplo 2: Hacer eco de la contraseña del usuario en un aviso

Python3

# Echoing password and masked with hashtag(#)
import maskpass  # importing maskpass library
 
# prompt msg = Password and
# masking password with hashtag(#)
pwd = maskpass.askpass(prompt="Password:", mask="#")
print(pwd)

Producción:

F:\files>python password.py
Password:###############
greeksforgreeks

En el ejemplo anterior, la contraseña del usuario aparecerá en un aviso mientras ingresa la contraseña porque el valor asignado en la máscara es hashtag (#), es decir, máscara = «#», por lo tanto, cuando el usuario ingrese la contraseña, se ocultará con un hashtag(#). 

advpass():

advpass usa pynput para obtener texto y devuelve la contraseña. advpass funciona tanto en la consola como en Spyder.

import maskpass
pwd = maskpass.advpass()

Aquí también la ejecución del código anterior devolverá la contraseña ingresada en un formato de string. Hay 4 argumentos opcionales en el método advpass(), son ‘prompt’, ‘mask’, ‘ide’ y ‘suppress’.

  • Aquí también el valor predeterminado para el mensaje es ‘Ingresar contraseña:’
  • El valor predeterminado para máscara es asterisco (*).
  • Aquí ide espera un valor booleano, es decir, verdadero o falso, el valor predeterminado de ide es False . No es necesario cambiar el valor de ide porque se comprueba automáticamente si se está ejecutando en IDE o terminal.
  • suprimir también espera un valor booleano, es decir, verdadero o falso, se usa solo en el IDE de Spyder. Establecer esto como Verdadero evita que la entrada se pase al resto del sistema. Esto evita que la consola de Spyder salte hacia abajo cuando se presiona la barra espaciadora. El valor predeterminado para suprimir es Verdadero.

El método advpass() tiene una función reveladora que alternará la visibilidad de la contraseña ingresada por el usuario cuando se presiona la tecla Ctrl izquierda. Presione la tecla Ctrl izquierda nuevamente para enmascarar/ocultar la contraseña. Nota: Esto funciona solo con advpass() y necesita pynput.

Ejemplo 1: Sin presionar la tecla Ctrl izquierda al ingresar la contraseña

Python3

# Type password without left CTRL press key
import maskpass  # importing maskpass library
 
# masking the password
pwd = maskpass.advpass() 
print('Password : ', pwd)

Producción:

F:\files>python password.py
Enter Password: ***************
Password : greeksforgreeks

En el resultado anterior, la contraseña está oculta con el símbolo de asterisco (*) porque un usuario no ha presionado la tecla Ctrl izquierda en el teclado.

Ejemplo 2: Al presionar la tecla Ctrl izquierda mientras ingresa la contraseña:

Python3

# Type password without left CTRL press key
import maskpass  # importing maskpass library
 
pwd = maskpass.advpass()  # masking the password
print('Password : ', pwd)

Producción:

F:\files>python password.py
Enter Password: greeksforgreeks
Password : greeksforgreeks

En el resultado anterior, la contraseña no está oculta porque un usuario presionó la tecla Ctrl izquierda en el teclado.

base64()

La función de codificación y decodificación base64 requiere un objeto similar a un byte. Para convertir una string en bytes, debemos codificar una string usando la función de codificación integrada de Python. Se utiliza principalmente la codificación UTF-8, también puede usar ‘ASCII’ para codificar, pero recomiendo usar la codificación UTF-8.

Python3

# encoding the string
string = "greeksforgreek"
 
# encoding string with utf-8
b = string.encode("UTF-8") 
print(b)

Producción:

F:\files>python strencode.py
b'greeksforgreek'

aquí el prefijo b indica que el valor es un objeto de byte.

Codificando la string usando el módulo base64():

Para codificar la string, es decir, para convertir la string en código de bytes, utilice el siguiente método:

base64.b64encode(‘string’.encode(“utf-8”))  

Decodificando el código de bytes usando el módulo base64():

Para decodificar el código de bytes, es decir, convertir el código de bytes nuevamente en una string, use el siguiente método:

base64.b64decode(‘código-byte’).decode(“utf-8”)

Ejemplo:

Python3

# importing base64 modules for
# encoding & decoding string
import base64
 
string = "GreeksforGreeks"
 
# Encoding the string
encode = base64.b64encode(string.encode("utf-8"))
print("str-byte : ", encode)
 
# Decoding the string
decode = base64.b64decode(encode).decode("utf-8")
print("byte-str : ", decode)

Producción:

F:\files>python base64.py
str-byte : b'R3JlZWtzZm9yR3JlZWtz'
byte-str : GreeksforGreeks

En el ejemplo anterior, «GreeksforGreeks», la string se codifica primero con el módulo base64, es decir, la string se convierte en un código de bytes y luego, con la ayuda del módulo base64, el código de bytes se decodifica nuevamente en su string original, es decir, «GreeksforGreeks».

Ocultar la contraseña del usuario durante el tiempo de entrada

Python3

# Hiding the inputted password with maskpass()
# and encrypting it with use of base64()
import maskpass  # to hide the password
import base64  # to encode and decode the password
 
# dictionary with username
# as key & password as value
dict = {'Rahul': b'cmFodWw=',
        'Sandeep': b'U2FuZGVlcA=='}
 
# function to create password
def createpwd():
    print("\n========Create Account=========")
    name = input("Username : ")
     
    # masking password with prompt msg 'Password :'
    pwd = maskpass.askpass("Password : ")
     
    # encoding the entered password
    encpwd = base64.b64encode(pwd.encode("utf-8"))
 
    # appending username and password in dict
    dict[name] = encpwd 
    # print(dict)
 
# function for sign-in
def sign_in():
    print("\n\n=========Login Page===========")
    name = input("Username : ")
     
    # masking password with prompt msg 'Password :'
    pwd = maskpass.askpass("Password : ")
     
    # encoding the entered password
    encpwd = base64.b64encode(pwd.encode("utf-8"))
 
    # fetching password with
    # username as key in dict
    password = dict[name] 
    if(encpwd == password):
        print("Successfully logged in.")
    else:
        print("Login Failed")
 
# calling function
createpwd()
sign_in()

Producción:

F:\files>python "userLogin.py"
========Create Account=========
Username : Rahulraj
Password : *****

=========Login Page===========
Username : Rahulraj
Password : *****
Successfully logged in.

Publicación traducida automáticamente

Artículo escrito por yadavrahulraj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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