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

 

目录

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 msvcrt

def get_password_with_asterisks(prompt='请输入密码: '):
    print(prompt, end='', flush=False)
    password = ''
    while True:
        ch = msvcrt.getch()
        if ch == b'\r':  # 回车键
            print()
            break
        elif 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 password

password = get_password_with_asterisks()
print(f'你输入的密码是: {password}')

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

import keyring, getpass

service_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)  # 实际过程中不会打印出来,这里做测试用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值