原文链接:http://www.juzicode.com/python-module-getpass/
getpass模块是Python标准库中的安全输入工具,专为处理敏感信息设计。它提供不回显的输入方式,适用于密码、密钥等机密数据的终端交互场景,有效防止密码泄露风险。
应用场景
- 命令行密码验证
- SSH/Telnet连接认证
- 数据库连接配置
- API密钥输入
- 敏感信息采集
- 自动化脚本安全交互
安装与导入
作为Python标准库组件,无需额外安装:
# 导入核心函数
from getpass import getpass, getuser
使用方法
1)基础密码输入
使用getpass()替代input()实现无回显输入:
# juzicode.com/VX公众号:juzicode
from getpass import getpass
username = input("用户名: ")
password = getpass("密码: ") # 输入时无显示
print(f"\n验证中: 用户名:{username}")
print(f"\n演示效果,明码打印密码:{password}")
# 实际应用中这里进行认证逻辑
运行效果:密码输入时终端不显示字符

2)带默认提示的密码输入
自定义输入提示信息:
# juzicode.com/VX公众号:juzicode
from getpass import getpass
secret_key = getpass(prompt='输入API密钥: ')
print(f"密钥长度: {len(secret_key)}字符")
运行效果:显示自定义提示语

3)获取系统用户名
自动获取当前登录用户:
# juzicode.com/VX公众号:juzicode
from getpass import getuser
current_user = getuser()
print(f"当前系统用户: {current_user}")
运行结果:返回操作系统用户名
当前系统用户: admin
4)异常处理机制
处理输入中断情况:
# juzicode.com/VX公众号:juzicode
from getpass import getpass, GetPassWarning
import warnings
try:
pin = getpass("输入6位数字PIN码: ")
if len(pin) != 6:
warnings.warn("PIN码长度必须为6位", GetPassWarning)
except KeyboardInterrupt:
print("\n操作已取消")
运行效果:Ctrl+C触发中断捕获

5)密码强度验证
结合正则表达式进行安全检查:
# juzicode.com/VX公众号:juzicode
import re
from getpass import getpass
def validate_password():
while True:
pwd = getpass("设置密码(需含大小写+数字+特殊字符): ")
if len(pwd) < 8:
print("✘ 密码至少8位")
continue
if not re.search(r'[A-Z]', pwd):
print("✘ 需包含大写字母")
continue
if not re.search(r'[a-z]', pwd):
print("✘ 需包含小写字母")
continue
if not re.search(r'[0-9]', pwd):
print("✘ 需包含数字")
continue
if not re.search(r'[!@#$%^&*]', pwd):
print("✘ 需包含特殊字符!@#$%^&*")
continue
print("✔ 密码强度合格")
return pwd
valid_pwd = validate_password()
运行效果:实时验证密码复杂度

总结
核心优势:
- 终端输入零回显,防止密码泄露
- 无需额外依赖,Python内置支持
- 跨平台兼容(Windows/Linux/macOS)
注意事项:
- IDE中运行可能仍会显示输入(如PyCharm)
- 不适用于图形界面程序
- 需配合加密存储保证全流程安全
通过getpass模块,开发者可轻松实现符合安全规范的密码交互功能,有效提升命令行工具的安全性。