如何在Python中隐藏和加密密码示例详解
作者:海拥 发布时间:2023-07-19 00:00:09
前言
有多种 Python 模块用于隐藏用户输入的密码,其中一个是**maskpass()模块。在 Python 中,借助maskpass()模块和base64()**模块,我们可以在输入时使用星号(*) 隐藏用户的密码,然后借助 base64() 模块可以对其进行加密。
maskpass()
maskpass() 是一个 Python 模块,可用于在输入期间隐藏用户的密码。maskpass() 模块还提供了一种安全的方式来处理程序通过终端与用户交互的密码提示。
安装:
在命令提示符下使用pip安装 maskpass。
pip install maskpass
这些模块有两种类型的功能/方法:
askpass()
advpass()
askpass():
askpass 使用标准库获取非阻塞输入并返回密码。
import maskpass
pwd = maskpass.askpass()
上述代码执行将以字符串格式返回输入的密码。askpass() 方法中有 2 个可选参数,分别是“提示”和“掩码”。提示的默认值为“输入密码:”,掩码的默认值为星号 (*)。
注意:如果您想用字符串、数字或符号来掩盖您的密码,那么只需在掩码中传递该值。例如,如果你想用井号(#) 屏蔽你的密码,然后在掩码中传递井号,即 mask=”#”,现在当用户输入密码时,该密码将用井号(#) 隐藏。
示例 1:没有在提示中回显用户的密码
# 不回显的用户密码
import maskpass # 隐藏密码
# 屏蔽密码
pwd = maskpass.askpass(mask="")
print(pwd)
输出:
F:\files>python password.py
Enter Password :
haiyong
在上面的例子中,用户的密码在输入密码时没有在提示中回显,因为掩码中分配的值是空的,即掩码=””(无空格),因此密码被隐藏,没有任何字符串、符号。
示例 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
在上面的例子中,用户的密码在输入密码时会在提示中回显,因为掩码中分配的值是hashtag(#)即 mask=”#” 因此当用户输入密码时,它会被隐藏井号(#)。
advpass():
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 键
# 输入密码而不用左 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 的内置编码函数对字符串进行编码。主要使用 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前缀表示该值是一个字节对象。
使用 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.
来源:https://juejin.cn/post/7066337015792402445


猜你喜欢
- 本文实例讲述了javascript修改图片src的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE html>&
- 本文实例讲述了Python实现的寻找前5个默尼森数算法。分享给大家供大家参考,具体如下:找前5个默尼森数。若P是素数且M也是素数,并且满足等
- 前言: 最近正在上一门Python数据处理的课程,要用到Jupyter,于是就先安装了
- <? $dbh = @mysql_connect("localhost:3306","root"
- 引言安装或者更新完pytorch后,运行不了,显示错误:(base) xu@xusu:~$ pythonPython 3.7.1 (defa
- NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes
- 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率。编程世界里有各种各样的
- 通过go语言实现http请求http.Postimport (?? ?"net/http"?? ?"net/u
- 先贴出完整代码. <script type="text/javascript"> function Stri
- 让你成功安装vscode中go的相关插件注意:该演示环境是windows环境,linux和mac环境操作思路一样vscode中有很多go的相
- 1.安装虚拟环境虚拟环境是真实python环境的复制版本。安装虚拟环境的命令:1)sudo pip install virtualenv #
- 简介EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。EXISTS 指定一个
- 为什么使用虚拟环境因为直接在真实环境进行安装python的包会造成环境之间的污染,因此需要创建虚拟环境,原则上每一个项目都需要有一个独属于自
- 这个间歇性向上滚动js代码很适合做广告展示,友情链接等等。与平常的无缝向上连续滚动不同的是它每滚动一个就会停顿一会儿。<!DOCTYP
- 如下所示:fp = file('data.txt')lines = []for line in fp: lin
- JavaScript 代码一般最常见的语法格式就是定义函数 function xxx(){/*code...*/},经常有这样的一大堆函数定
- 等了好久的小程序,终于在近日曝光了。现在就带大家来尝尝鲜。以下是一张随便看看的图。一、构建微信小程序的步骤下载开发工具考虑到微信0.9.09
- 正确的安装1、先安装packagingpython3 -m pip install packaging执行这个命令后会提示这样安装成功Def
- 需求:需要在v-html的html字符串的button中绑定点击事件,需要点击后做一些操作,必须渲染成html,但是渲染后的html里面写绑
- 一、下载termux直接搜索Termux,进入官网: 点击箭头所指的标志,进入页面,往下划到下载版本,直接下最新版本,不推荐下载F