获取隐藏密码输入

问题描述 投票:0回答:7

您知道在 Linux 中,当您尝试一些 Sudo 操作时,它会告诉您输入密码,而当您键入时,终端窗口中不会显示任何内容(密码不显示)?

有没有办法在Python中做到这一点?我正在编写一个需要如此敏感信息的脚本,并且希望在我键入它时将其隐藏。

换句话说,我想从用户那里获取密码而不显示密码。

python passwords user-input
7个回答
543
投票

使用

getpass.getpass()

from getpass import getpass
password = getpass()

可以将可选提示作为参数传递;默认为

"Password: "

请注意,此函数需要适当的终端,因此它可以关闭键入字符的回显 - 请参阅 “GetPassWarning:无法控制终端上的回显”,从 IDLE 运行时了解更多详细信息。


204
投票
import getpass

pswd = getpass.getpass('Password:')

getpass 适用于 Linux、Windows 和 Mac。


20
投票

此代码将打印一个星号而不是每个字母。

import sys
import msvcrt

passwor = ''
while True:
    x = msvcrt.getch()
    if x == '\r':
        break
    sys.stdout.write('*')
    passwor +=x

print '\n'+passwor

4
投票

更新@Ahmed ALaa的答案

# import msvcrt
import getch

def getPass():
    passwor = ''
    while True:
        x = getch.getch()
        # x = msvcrt.getch().decode("utf-8")
        if x == '\r' or x == '\n':
            break
        print('*', end='', flush=True)
        passwor +=x
    return passwor

print("\nout=", getPass())

msvcrt 仅适用于 Windows,但 PyPI 中的 getch 应该适用于两者(我只在 Linux 上进行了测试)。 您还可以注释/取消注释这两行以使其适用于 Windows。


3
投票

您还可以使用适用于 Windows 和 Linux 的 pwinput 模块。 它将字符替换为“*”(默认情况下)并且退格键有效。

import pwinput

password = pwinput.pwinput(prompt='Password: ')

您也可以选择传递不同的

mask
字符。

import pwinput

password = pwinput.pwinput(prompt='Password: ', mask='')

请参阅 pwinput 文档了解更多信息。


1
投票

这是我的代码,基于 @Ahmed ALaa

提供的代码

特点:

  • 适用于最多 64 个字符的密码
  • 接受退格键输入
  • 输出
    *
    字符
    (DEC: 42 ; HEX: 0x2A)
    而不是输入字符

缺点:

  • 仅适用于 Windows

函数

secure_password_input()
在调用时将密码返回为
string
。它接受一个密码提示字符串,该字符串将显示给用户输入密码

def secure_password_input(prompt=''):
    p_s = ''
    proxy_string = [' '] * 64
    while True:
        sys.stdout.write('\x0D' + prompt + ''.join(proxy_string))
        c = msvcrt.getch()
        if c == b'\r':
            break
        elif c == b'\x08':
            p_s = p_s[:-1]
            proxy_string[len(p_s)] = " "
        else:
            proxy_string[len(p_s)] = "*"
            p_s += c.decode()

    sys.stdout.write('\n')
    return p_s

0
投票

我建议使用pyautogui。 Pyautogui 是一个很棒的 GUI 自动化模块。它可以访问鼠标、键盘,在屏幕上查找图像(使用 Pillow),还可以显示警告框、确认框和按钮。在这种情况下,我建议的函数是password()。例如:

import pyautogui

password = pyautogui.password('Enter password: ') #password hidden with *

print(password)

如果您想了解更多有关 pyautogui 如何用于按钮、确认框和警报框或任何其他内容的信息,您可以查看信息这里完整文档

© www.soinside.com 2019 - 2024. All rights reserved.