Python使用maskpass和base64隐藏及加密密码详解

一只小鹿
一只小鹿
发布时间:2026-10-15| 5人浏览过
原创

本文详细介绍如何在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密码安全相关内容,可参考本站其他文章或继续浏览后续教程,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。