如何在Python中隐藏和加密密码示例详解

目录
  • 前言
  • maskpass()
    • 安装:
    • askpass():
    • advpass():
    • base64()
    • 在输入时间内隐藏用户密码
  • 总结

前言

有多种 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.

总结

到此这篇关于如何在Python中隐藏和加密密码的文章就介绍到这了,更多相关Python隐藏和加密密码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用python加密自己的密码

    有些时候我们不得不在自己的代码里写上密码,为了安全起见,我们可以为自己的密码加密 先上段代码,这个代码是转自网上 root@ProFtp:/usr/lib/python2.7# more jastmencrypt.py """ jastme encrypt password """ def encrypt(key, s): b = bytearray(str(s).encode("gbk")) n = len(b) # 求出

  • python实现希尔密码加密的示例代码

    目录 原理 实现 原理 希尔密码是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明. 每个字母当作26进制数字:A=0, B=1, C=2- 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26.(注意用作加密的矩阵(即密匙)在 必须是可逆的,否则就不可能解码.只有矩阵的行列式和26互质,才是可逆的.) 实现 希尔密码是运用基本矩阵论原理的替换密码,使用一个m*m的矩阵作为密钥,此矩阵必须可逆,解密使用逆矩阵解密. 加密: 密文向量 = 密钥矩阵 * 明

  • python 破解加密zip文件的密码

    今天的文章来自 盏茶作酒 同学.他在老电脑中发现了一个加密的 zip 文件,于是用 Python 破解了文件密码.在破解的过程中出现了内存爆炸的问题,通过阅读 Python 源代码找到了解决方案. 下面就来给大家分享一下他的操作. 之前在家里的老电脑中,发现一个加密zip压缩包,由于时隔太久忘记密码了,依稀记得密码是6位字母加数字,网上下载了很多破解密码的软件都没有效果,于是想到自己用Python写一个暴力破解密码的脚本. Python 有一个内置模块 zipfile 可以解压 zip 压缩包.

  • python base64库给用户名或密码加密的流程

    给明文密码加密的流程: import base64 pwd_after_encrypt = base64.b64encode(b'this is a scret!') pwd_before_encrypt = base64.b64decode(b'dGhpcyBpcyBhIHNjcmV0IQ==').decode('ascii') print(pwd_after_encrypt) print(pwd_before_encrypt) 运行结果: b'dGhpcyBpcyBhIHNjcmV0IQ==

  • Python 隐藏输入密码时屏幕回显的实例

    我们再登录账号密码的时候,账号可以回显在屏幕上,但是对于比较隐私的项目例如密码最好是不要再屏幕上回显.就像我们再终端登录linux服务器的时候,输入信息的时候只显示用户名,而不显示登录密码. 以下是Python代码对比: 1.明文回显账号密码 ##代码 [root@room1pc01 data]# cat login1.py #!/usr/bin/env python2.6 username = raw_input('username:') password = raw_input('passw

  • 如何在Python中隐藏和加密密码示例详解

    目录 前言 maskpass() 安装: askpass(): advpass(): base64() 在输入时间内隐藏用户密码 总结 前言 有多种 Python 模块用于隐藏用户输入的密码,其中一个是**maskpass()模块.在 Python 中,借助maskpass()模块和base64()**模块,我们可以在输入时使用星号(*) 隐藏用户的密码,然后借助 base64() 模块可以对其进行加密. maskpass() maskpass() 是一个 Python 模块,可用于在输入期间隐

  • 详解Python中生成随机数据的示例详解

    目录 随机性有多随机 加密安全性 PRNG random 模块 数组 numpy.random 相关数据的生成 random模块与NumPy对照表 CSPRNG 尽可能随机 os.urandom() secrets 最佳保存方式 UUID 工程随机性的比较 在日常工作编程中存在着各种随机事件,同样在编程中生成随机数字的时候也是一样,随机有多随机呢?在涉及信息安全的情况下,它是最重要的问题之一.每当在 Python 中生成随机数据.字符串或数字时,最好至少大致了解这些数据是如何生成的. 用于在 P

  • Python中bisect的用法及示例详解

    bisect是python内置模块,用于有序序列的插入和查找. 查找: bisect(array, item) 插入: insort(array,item) 查找 import bisect a = [1,4,6,8,12,15,20] position = bisect.bisect(a,13) print(position) # 用可变序列内置的insert方法插入 a.insert(position,13) print(a) 输出: 5 [1, 4, 6, 8, 12, 13, 15, 2

  • Python中三种花式打印的示例详解

    目录 1. 引言 2. 打印圣诞树 2.1 问题描述 2.2 问题分析 3. 打印字母版圣诞树 3.1 问题描述 3.2 问题分析 4. 打印字母版菱形 4.1 问题描述 4.2 问题分析 5. 总结 1. 引言 在Python中有很多好玩的花式打印,对厉害的高手来说可能是小菜一碟,对入门的小白来说往往让人望而退步,我们今天就来挑战下面三个常见的花式打印吧... 2. 打印圣诞树 2.1 问题描述 编码实现函数christmas_tree(height),该函数输入参数为一个整数表示圣诞树的高度

  • Python中字典常用操作的示例详解

    目录 前言 初始化 合并字典 字典推导式 Collections 标准库 字典转 JSON 字典转 Pandas 前言 字典是Python必用且常用的数据结构,本文梳理常用的字典操作,看这个就够了,涉及: 初始化 合并字典 字典推导式 Collections 标准库 字典转JSON 字典转Pandas 初始化 # 最常用这种 my_object = { "a": 5, "b": 6 } # 如果你不喜欢写大括号和双引号: my_object = dict(a=5,

  • python中的mock接口开发示例详解

    什么是mock? mock在翻译过来有模拟的意思.它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言. Mock通常是指,在测试一个对象时,我们构造一些假的对象来模拟与其交互.而这些Mock对象的行为是我们事先设定且符合预期.通过这些Mock对象来测试对象在正常逻辑,异常逻辑或压力情况下工作是否正常,Mock的行为固定,它确保当你访问该Mock的某个方法时总是能够获得一个没有任何逻辑的直接就返回的预期结果.Mock接口就是用一些合理的手段构造对象去模拟真实接口. import f

  • python中reload(module)的用法示例详解

    前言 本文主要给大家介绍了关于python中reload(module)用法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1.Python2中可以和Python3中关于reload()用法的区别. Python2 中可以直接使用reload(module)重载模块. Pyhton3中需要使用如下方式: (1) >>> from imp >>> imp.reload(module) (2) >>> from imp imp

  • 在Python中执行系统命令的方法示例详解

    前言 Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库.在Python/wxPython环境下,执行外部命令或者说在Python程序中启动另一个程序的方法. 本文将详细介绍关于Python中如何执行系统命令的相关资料,下面话不多说了,来一起看看详细的介绍吧. (1) os.system() 这个方法直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行返回的信息. >>> import os

  • Python中的类与类型示例详解

    1.经典类与新式类 在了解Python的类与类型前,需要对Python的经典类(classic classes)与新式类(new-style classes)有个简单的概念. 在Python 2.x及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于"新式类",都会获得所有"新式类"的特性:反之,即不由任意内置类型派生出的类,则称之为"经典类". "新式类"和"经典类"的区

  • Python中第三方库Faker的使用详解

    目录 背景介绍 实战:模拟1w条数据写入Excel Python库讲解 1. 生成姓名 2. 生成详细地址 3. 生成所在省份 4. 生成手机号 5. 生成身份证号 6. 生成出生年月 7. 生成邮箱 补充 1. address 地址 2. person 人物 3. color 颜色 4. company 公司 5. credit_card 银行信用卡 6. date_time 时间日期 7. file 文件 8. internet 互联网 9. job 工作 10. lorem 乱数假文 11

随机推荐