python内置库之getpass、msvcrt:密码安全输入(keyring+getpass、msvcrt实现密码安全管理)

embedded/2025/2/11 7:08:49/

 

目录

getpass的用法

输入

获取用户名

msvcrt库实现输入加密

getpass+keyring实现密码安全存储及获取


 

python之keyring库:安全密码管理库,不同平台service_name、username的获取-CSDN博客

中介绍了使用keyring库进行密码的安全存储,但是也提到keyring库的使用可能需要用户的交互,如在首次存储凭证时输入密码或修改密码时需要输入密码,这样会是密码暴露出来。所有我们可以使用Python的内置库getpass,这个模块是用来在终端(命令行界面)中安全地获取用户密码输入的。在用户输入密码时隐藏输入内容,从而增强了安全性。对于编写需要用户输入密码的程序非常有用。且getpass模块支持跨平台,但在不同的操作系统上可能会有不同的行为,例如,在某些Unix-like系统上,它可能会使用/dev/tty来获取密码输入,而在Windows上,它可能会使用msvcrt模块来实现。因此,尽管getpass旨在提供跨平台的一致性,但在某些情况下,你可能需要根据目标平台调整代码或进行测试。

getpass的用法

输入

import getpass# 提示用户输入密码
password = getpass.getpass(prompt='请输入密码: ', stream=None)# 打印输入的密码(仅用于演示,实际应用中不应打印密码)
print(f'你输入的密码是: {password}')

获取用户名

print(getpass.getuser())

获取当前登录的用户名。此函数将从环境变量LOGNAME、USER、LNAME、USERNAME中按顺序读取第一个非空的值。若这些环境变量都未设置,在支持 pwd 模块的系统上,会返回对应的密码数据库登录名。在获取登录名的功能上,推荐优先使用此函数,而非 os.getlogin()。

msvcrt库实现输入加密

getpass会隐藏输入的内容,而在输入时如果需要显示 * 而不是完全隐藏输入内容,可以使用 msvcrt 模块(仅适用于Windows)或 termios 模块(适用于Unix-like系统)来实现自定义的输入处理。

import msvcrtdef get_password_with_asterisks(prompt='请输入密码: '):print(prompt, end='', flush=False)password = ''while True:ch = msvcrt.getch()if ch == b'\r':  # 回车键print()breakelif ch == b'\x08':  # 退格键if len(password) > 0:password = password[:-1]print('\b \b', end='', flush=False)else:password += ch.decode('utf-8')print('*', end='', flush=False)return passwordpassword = get_password_with_asterisks()
print(f'你输入的密码是: {password}')

getpass+keyring实现密码安全存储及获取

import keyring, getpassservice_name = getpass.getpass('请输入server凭证:')
username = getpass.getpass('请输入用户名:')
password = getpass.getpass('请输入密码:')keyring.set_password(service_name, username, password)pd = keyring.get_password(service_name, username)
print(pd)  # 实际过程中不会打印出来,这里做测试用

 


http://www.ppmy.cn/embedded/161264.html

相关文章

如何在 Java 应用中实现数据库的主从复制(读写分离)?请简要描述架构和关键代码实现?

在Java应用中实现数据库主从复制(读写分离) 一、架构描述 (一)整体架构 主库(Master) 负责处理所有的写操作(INSERT、UPDATE、DELETE等)。它是数据的源头,所有的数据变…

支持Windows和Linux系统的Python定时关机脚本

以下是一个支持Windows和Linux系统的Python定时关机脚本,允许设置定时关机或取消关机计划: import sys import os import datetime import ctypes import redef is_admin():"""检查是否具有管理员权限"""if os.name nt:…

Mp4视频播放机无法播放视频-批量修改视频分辨率(帧宽、帧高)

背景 家人有一台夏新多功能 视频播放器(夏新多功能 视频播放器),用来播放广场舞。下载了一些广场舞视频, 只有部分视频可以播放,其他视频均无法播放,判断应该不是帧速率和数据速率的限制, 分析可能是播放器不支持帧高度大于720的视频。由于视频文件较多,需要借助视频编…

DeepSeek全球第二,R1生态扩展,华为荣耀接入,OpenAI推出深度研究,谷歌Gemini 2.0发布!AI Weekly 2.3-2.9

📢本周AI快讯 | 1分钟速览🚀 1️⃣ 🚨DeepSeek发布官方声明:警示仿冒账号和不实信息,官方渠道已公布,谨防假冒。 2️⃣ 🔍秘塔AI集成DeepSeek-R1:智能搜索&推理能力升级&#…

git连接——问题

根据你提供的错误信息,Git 无法通过 git:// 协议连接到 GitHub。这可能是由于以下几种原因: 网络问题:某些网络环境可能会阻止 Git 协议(git://)的访问。代理配置问题:如果你在使用代理服务器,…

25/2/8 <机器人基础> 轨迹控制基本知识点,传动系统

轨迹控制基本知识点及例题 机器人“轨迹控制”是机器人学中的重要内容,主要涉及如何规划和控制机器人末端执行器或关节的运动轨迹。 1. 轨迹规划基础 知识点 轨迹定义:轨迹是机器人在运动过程中位置、速度、加速度随时间的变化。 轨迹规划的目标&…

aspectFill(填充目标区域的同时保持图像的原有宽高比 (aspect ratio)图像不会被拉伸或压缩变形

“aspectFill” 是一个常用于图像和视频处理的术语,尤其是在用户界面 (UI) 设计和图形编程领域。它描述的是一种图像缩放或调整大小的方式,旨在填充目标区域的同时保持图像的原有宽高比 (aspect ratio)。 更详细的解释: Aspect Ratio (宽高比): 指的是图…

Spring Cloud 06 - 网关

Zuul 和 Gateway 文章目录 Zuul 和 Gateway一:网关简介0:为什么要引入网关1:网关分类2:网关设计 二:zuul1:Nginx vs Zuul2:zuul网关实现示例2.1:网关实现2.2:自定义过滤器…