📜  在Python中隐藏和加密密码?

📅  最后修改于: 2022-05-13 01:54:18.896000             🧑  作者: Mango

在Python中隐藏和加密密码?

有多种Python模块用于隐藏用户输入的密码,其中一个是maskpass()模块。在Python中,借助maskpass()模块和base64()模块,我们可以在输入时使用星号(*) 隐藏用户的密码,然后借助 base64() 模块可以对其进行加密。

掩码通()

maskpass() 是一个Python模块,可用于在输入期间隐藏用户的密码。 maskpass() 模块还提供了一种安全的方式来处理程序通过终端与用户交互的密码提示。

安装:

在命令提示符下使用pip安装 maskpass。

pip install maskpass

这些模块有两种类型的功能/方法:

  • 询问通过()
  • 进阶通行证()

问通():

askpass 使用标准库获取非阻塞输入并返回密码。

import maskpass
pwd = maskpass.askpass()

上述代码执行将以字符串格式返回输入的密码。 askpass() 方法中有 2 个可选参数,分别是“提示”和“掩码”。提示的默认值为“输入密码:”,掩码的默认值为星号 (*)。

注意:如果你想用字符串、数字或符号来屏蔽你的密码,那么只需在掩码中传递该值。例如,如果你想用井号(#) 屏蔽你的密码,然后在掩码中传递井号,即 mask=”#”,现在当用户输入密码时,该密码将用井号(#) 隐藏。

示例 1:没有在提示中回显用户的密码

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


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)


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


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


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


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)


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()


输出:

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

在上面的例子中,用户的密码在输入密码时没有在提示符中回显,因为掩码中分配的值为,即 mask=””(无空格),因此密码被隐藏,没有任何字符串、符号。

示例 2:在提示中回显用户的密码

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)

输出:

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

在上面的例子中,用户的密码在输入密码时会在提示中回显,因为掩码中分配的值是hashtag(#)即 mask=”#” 因此当用户输入密码时,它会被隐藏井号(#)。

进阶通行证():

advpass 使用 pynput 获取文本并返回密码。 advpass 在控制台和 Spyder 中都可以使用。

import maskpass
pwd = maskpass.advpass()

上面的代码执行也会以字符串格式返回输入的密码。 advpass() 方法中有 4 个可选参数,它们是 'prompt'、'mask'、'ide' 和 'suppress'。

  • 这里提示的默认值也是“输入密码:”
  • 掩码的默认值为星号 (*)。
  • 这里ide需要一个布尔值,即 true 或 false,ide 的默认值为False 。不需要更改 ide 的值,因为它会自动检查它是在 IDE 还是在终端上运行。
  • suppress还需要一个布尔值,即 true 或 false,仅在 Spyder IDE 中使用。将此设置为 True 可防止将输入传递给系统的其余部分。这可以防止 Spyder 控制台在按下空格键时跳下。抑制的默认值为True。

advpass() 方法有一个显示功能,当按下 Left-Ctrl 键时,它将切换用户输入密码的可见性。再次按 Left-Ctrl 键以屏蔽/隐藏密码。注意:这仅适用于 advpass() 并且需要 pynput。

示例 1:输入密码时不按左 ctrl 键

Python3

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

输出:

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

在上面的输出中,密码用星号(*)符号隐藏,因为用户没有按下键盘上的左 ctrl 键。

示例 2:在输入密码的同时按下左 ctrl 键:

Python3

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

输出:

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

在上面的输出中,密码没有隐藏,因为用户按下了键盘上的左 ctrl 键。

base64()

base64 编码和解码函数都需要一个类似字节的对象。要将字符串转换为字节,我们必须使用 Python 的内置编码函数对字符串进行编码。主要使用 UTF-8 编码,您也可以使用 'ASCII' 进行编码,但我建议使用 UTF-8 编码。

Python3

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

输出:

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

这里b前缀表示该值是一个字节对象。

使用 base64() 模块对字符串进行编码:

要对字符串进行编码,即将字符串转换为字节码,请使用以下方法:

使用 base64() 模块解码字节码:

要解码字节码,即将字节码再次转换为字符串,请使用以下方法:

例子:

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)

输出:

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

在上面的例子中,“GreeksforGreeks”字符串首先使用base64模块编码,即字符串被转换为字节码,然后在base64模块的帮助下再次将字节码解码为其原始字符串,即“GreeksforGreeks”。

在输入时间内隐藏用户密码

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()

输出:

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

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