Python使用maskpass和base64隐藏及加密密码详解
本文详细介绍如何在Python中利用maskpass模块隐藏用户输入的密码,并结合base64模块对密码进行加密存储。文章涵盖maskpass的askpass和advpass方法用法、参数配置及IDE兼容性,演示base64编码解码过程,并提供完整的用户登录系统示例,实现密码的安全输入与校验。
前言
Python提供了多种模块来安全地处理用户密码输入,其中maskpass模块是常用选择之一。结合maskpass模块与base64模块,开发者可以在用户输入密码时以星号(*)进行隐藏,并通过base64模块对密码进行加密处理,从而提升安全性。
maskpass模块介绍
maskpass是一个Python第三方库,专门用于在终端输入过程中隐藏用户密码。它提供了一种安全机制,用于处理程序通过终端与用户交互时的密码提示场景。
安装方法
在命令行环境中,使用pip工具安装maskpass模块。
pip install maskpass该模块主要提供两类功能方法:
- askpass
- advpass
askpass方法详解
askpass方法利用标准库获取非阻塞的用户输入,并返回输入的密码字符串。
import maskpass
pwd = maskpass.askpass()上述代码执行后,将以字符串格式返回用户输入的密码。askpass()方法包含两个可选参数:'prompt'(提示语)和'mask'(掩码字符)。其中,'prompt'的默认值为“输入密码:”,'mask'的默认值为星号(*)。
注意:若希望使用其他字符(如字符串、数字或符号)来掩盖密码,只需在mask参数中指定该字符。例如,若希望使用井号(#)作为掩码,可设置mask=”#”。此时,用户输入的密码将以井号(#)形式隐藏显示。
示例 1:输入时不回显密码
# 不回显的用户密码
import maskpass # 隐藏密码
# 屏蔽密码
pwd = maskpass.askpass(mask="")
print(pwd)输出结果:
F:\files>python password.py Enter Password : haiyong
在上述示例中,用户输入密码时未在终端回显任何字符,这是因为mask参数被设置为空字符串,即mask=””(无空格)。因此,密码输入过程完全隐藏,不显示任何字符串或符号。
示例 2:输入时回显掩码字符
# 回显密码并用井号标签 (#) 屏蔽
import maskpass # importing maskpass library
# prompt msg = Password and
# 用井号(#)屏蔽密码
pwd = maskpass.askpass(prompt="Password:", mask="#")
print(pwd)输出结果:
F:\files>python password.py Password:############### haiyong
在上述示例中,用户输入密码时会在终端回显掩码字符,这是因为mask参数被设置为井号(#),即mask=”#”。因此,当用户输入密码时,屏幕将显示由井号(#)组成的隐藏字符串。
advpass方法详解
advpass方法利用pynput库获取文本输入并返回密码。该方法在标准控制台和Spyder IDE中均可使用。
import maskpass
pwd = maskpass.advpass()上述代码执行后,同样以字符串格式返回用户输入的密码。advpass()方法包含四个可选参数:'prompt'(提示语)、'mask'(掩码字符)、'ide'(IDE模式)和'suppress'(抑制模式)。
- 其中,'prompt'参数的默认值仍为“输入密码:”。
- 'mask'参数的默认值为星号(*)。
- 'ide'参数需要布尔值(True或False),默认值为False。通常无需手动修改此值,因为模块会自动检测当前运行环境是IDE还是终端。
- 'suppress'参数同样需要布尔值(True或False),仅在Spyder IDE中使用。将其设置为True可防止输入内容传递给系统其他部分,从而避免Spyder控制台在按下空格键时发生滚动。'suppress'的默认值为True。
advpass()方法还具备一个显示功能:当按下Left-Ctrl键时,可切换用户输入密码的可见性(显示明文或重新隐藏)。再次按下Left-Ctrl键即可恢复隐藏状态。注意:此功能仅适用于advpass(),且依赖pynput库的支持。
示例 1:输入密码时未按下左Ctrl键
# 输入密码而不用左 CTRL 键
import maskpass # importing maskpass library
# 屏蔽密码
pwd = maskpass.advpass()
print('Password : ', pwd)输出结果:
F:\files>python password.py Enter Password: *************** Password : haiyong
在上述输出中,密码以星号(*)符号隐藏显示,因为用户在输入过程中未按下键盘上的左Ctrl键。
示例 2:输入密码时按下左Ctrl键
# 输入密码而不用左 CTRL 键
import maskpass # importing maskpass library
pwd = maskpass.advpass() # masking the password
print('Password : ', pwd)输出结果:
F:\files>python password.py Enter Password: haiyong Password : haiyong
在上述输出中,密码以明文形式显示,因为用户在输入过程中按下了键盘上的左Ctrl键,触发了可见性切换功能。
base64模块介绍
base64模块的编码和解码功能均需接收类似字节的对象。要将字符串转换为字节,必须使用Python的内置encode()函数对字符串进行编码。推荐使用UTF-8编码,也可使用'ASCII'编码,但建议优先使用UTF-8以确保兼容性。
# encoding the string
string = "haiyong"
# encoding string with utf-8
b = string.encode("UTF-8")
print(b)输出结果:
F:\files>python strencode.py b'greeksforgreek'
此处'b'前缀表示该值是一个字节对象(bytes object)。
使用base64模块对字符串进行编码
若要将字符串编码为字节码,请使用以下方法:
base64.b64encode('string'.encode(“utf-8”)) 使用base64模块解码字节码
若要将字节码解码回字符串,请使用以下方法:
base64.b64decode('byte-code').decode("utf-8")完整示例
# 导入用于编码和解码字符串的 base64 模块
import base64
string = "haiyong"
# 编码字符串
encode = base64.b64encode(string.encode("utf-8"))
print("str-byte : ", encode)
# 解码字符串
decode = base64.b64decode(encode).decode("utf-8")
print("byte-str : ", decode)输出结果:
F:\files>python base64.py str-byte : b'R3JlZWtzZm9yR3JlZWtz' byte-str : haiyong
在上述示例中,字符串“haiyong”首先通过base64模块进行编码,即转换为字节码;随后,再次利用base64模块将字节码解码还原为原始字符串“haiyong”。
综合示例:输入时隐藏并加密密码
# 使用 maskpass() 隐藏输入的密码并使用 base64() 对其进行加密
import maskpass # to hide the password
import base64 # to encode and decode the password
# 以用户名作为键和密码作为值的字典
dict = {'Rahul': b'cmFodWw=',
'Sandeep': b'U2FuZGVlcA=='}
# 创建密码的功能
def createpwd():
print("\n========Create Account=========")
name = input("Username : ")
# 使用提示 msg 'Password :' 屏蔽密码
pwd = maskpass.askpass("Password : ")
# 对输入的密码进行编码
encpwd = base64.b64encode(pwd.encode("utf-8"))
# 在dict中附加用户名和密码
dict[name] = encpwd
# print(dict)
# 登录功能
def sign_in():
print("\n\n=========Login Page===========")
name = input("Username : ")
# 使用提示 msg 'Password :' 屏蔽密码
pwd = maskpass.askpass("Password : ")
# 对输入的密码进行编码
encpwd = base64.b64encode(pwd.encode("utf-8"))
# 以用户名作为dict中的键获取密码
password = dict[name]
if(encpwd == password):
print("Successfully logged in.")
else:
print("Login Failed")
# 调用函数
createpwd()
sign_in()输出结果:
F:\files>python "userLogin.py" ========Create Account========= Username : haiyong Password : *****
=========Login Page=========== Username : haiyong Password : ***** Successfully logged in.
总结
本文介绍了如何在Python中利用maskpass模块隐藏用户输入的密码,并结合base64模块对密码进行加密处理。更多Python密码安全相关内容,可参考本站其他文章或继续浏览后续教程,感谢支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









