Hướng dẫn can you hide input in python? - bạn có thể ẩn đầu vào trong python không?

Bạn biết làm thế nào trong Linux khi bạn thử một số thứ sudo, nó bảo bạn nhập mật khẩu và, khi bạn gõ, không có gì được hiển thị trong cửa sổ đầu cuối (mật khẩu không được hiển thị)?

Có cách nào để làm điều đó trong Python không? Tôi đang làm việc trên một tập lệnh yêu cầu thông tin rất nhạy cảm và muốn nó được ẩn khi tôi gõ nó.

Nói cách khác, tôi muốn lấy mật khẩu từ người dùng mà không cần hiển thị mật khẩu.

Tomerikoo

16.8K16 Huy hiệu vàng39 Huy hiệu bạc57 Huy hiệu đồng16 gold badges39 silver badges57 bronze badges

hỏi ngày 8 tháng 2 năm 2012 lúc 22:03Feb 8, 2012 at 22:03

2

import getpass

pswd = getpass.getpass('Password:')

GetPass hoạt động trên Linux, Windows và Mac.

Hướng dẫn can you hide input in python? - bạn có thể ẩn đầu vào trong python không?

Cœur

359K24 Huy hiệu vàng189 Huy hiệu bạc258 Huy hiệu đồng24 gold badges189 silver badges258 bronze badges

Đã trả lời ngày 8 tháng 11 năm 2013 lúc 7:34Nov 8, 2013 at 7:34

Hướng dẫn can you hide input in python? - bạn có thể ẩn đầu vào trong python không?

NafscriptnafscriptNafscript

4.8792 Huy hiệu vàng16 Huy hiệu bạc15 Huy hiệu Đồng2 gold badges16 silver badges15 bronze badges

6

Mã này sẽ in dấu hoa thị thay vì mỗi chữ cái.

import sys
import msvcrt

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

print '\n'+passwor

Hướng dẫn can you hide input in python? - bạn có thể ẩn đầu vào trong python không?

wjandrea

25.2k8 Huy hiệu vàng54 Huy hiệu bạc75 Huy hiệu Đồng8 gold badges54 silver badges75 bronze badges

Đã trả lời ngày 30 tháng 4 năm 2017 lúc 7:20Apr 30, 2017 at 7:20

Ahmed Alaaahmed AlaaAhmed ALaa

2172 Huy hiệu bạc3 Huy hiệu đồng2 silver badges3 bronze badges

6

Cập nhật câu trả lời của @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 chúng tôi chỉ dành cho Windows, nhưng Getch từ PYPI nên hoạt động cho cả hai (tôi chỉ được thử nghiệm với Linux). Bạn cũng có thể nhận xét/giải nén hai dòng để làm cho nó hoạt động cho Windows.

Đã trả lời ngày 10 tháng 6 năm 2020 lúc 2:50Jun 10, 2020 at 2:50

1

Đây là mã của tôi dựa trên mã do @ahmed alaa cung cấp@Ahmed ALaa

Features:

  • Hoạt động cho mật khẩu lên đến 64 ký tự
  • Chấp nhận đầu vào backspace
  • Đầu ra * ký tự (DEC: 42 ; HEX: 0x2A) thay vì ký tự đầu vào

Demerits:

  • Chỉ hoạt động trên Windows

Hàm secure_password_input() trả về mật khẩu dưới dạng string khi được gọi. Nó chấp nhận chuỗi nhắc mật khẩu, sẽ được hiển thị cho người dùng để nhập mật khẩu

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

Đã trả lời ngày 17 tháng 9 năm 2020 lúc 5:16Sep 17, 2020 at 5:16

SagarsagarSagar

3542 Huy hiệu bạc14 Huy hiệu Đồng2 silver badges14 bronze badges

3

Bạn cũng có thể sử dụng mô -đun Pwinput hoạt động trên cả Windows và Linux. Nó thay thế char bằng '*' (theo mặc định) và backspace hoạt động.

import pwinput

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

Bạn có thể, tùy chọn, vượt qua một ký tự

import sys
import msvcrt

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

print '\n'+passwor
0 khác.

import pwinput

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

Xem tài liệu Pwinput để biết thêm thông tin.

Hướng dẫn can you hide input in python? - bạn có thể ẩn đầu vào trong python không?

Henry Ecker

33K18 Huy hiệu vàng32 Huy hiệu bạc52 Huy hiệu Đồng18 gold badges32 silver badges52 bronze badges

Đã trả lời ngày 11 tháng 8 lúc 16:24Aug 11 at 16:24