【发布时间】:2012-06-15 00:01:38
【问题描述】:
我正在尝试创建一个登录窗口,提示用户输入他们的用户名和密码,尽管在输入密码时我正在寻找要打印的星号,例如常见的密码输入(即 - Sekr3t 已回显如:* * * * * *)。
这是我到目前为止的代码,我不知道为什么它不回显星号:
import msvcrt
import sys
def login(prompt = '> '):
write = sys.stdout.write
for x in prompt:
msvcrt.putch(x)
passw = ""
while 1:
x = msvcrt.getch()
if x == '\r' or x == '\n':
break
if x == '\b':
# position of my error
passw = passw[:-1]
else:
write('*')
passw = passw + x
msvcrt.putch('\r')
msvcrt.putch('\n')
return passw
任何帮助将不胜感激。
【问题讨论】:
-
你真的应该考虑使用
getpass()。我知道您已经发现了这一点,但实际上没有回应任何 提高安全性。 -
@ThiefMaster 我可以看到它将如何提高安全性,但该应用程序主要是为我的一个游戏网络中的一些朋友提供的,他们不是很擅长计算机,所以我正在尝试让它介于安全和用户友好之间——这就是为什么我选择尝试让星号回显而不是什么都没有。
-
查看
curses模块 -
隐藏密码长度的安全性提升很小,输入时无响应是相当大的可用性成本。
标签: python passwords echo msvcrt getch