2012-02-08 20 views
107

Bạn biết làm thế nào trong Linux khi bạn thử một số nội dung Sudo nó cho bạn nhập mật khẩu và khi bạn nhập, 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ị)?Nhập mật khẩu dòng lệnh bằng Python

Có cách nào để thực hiện điều đó bằng 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 nhạy cảm và muốn nó bị ẩn khi tôi gõ nó.

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

Trả lời

171

Sử dụng getpass.getpass().

+0

sẽ làm việc, nhưng làm thế nào người ta có thể cẩn thận của một "hacker" mà sẽ tạo một bản sao của kịch bản và sau đó nhận xét ra dòng yêu cầu mật khẩu người dùng? – asf107

+81

@ asf107: Nếu tin tặc có thể chỉnh sửa mã nguồn, có những vấn đề khác cần phải lo lắng. – DSM

+6

@ asf107 - Ý tưởng đằng sau việc yêu cầu mật khẩu là để bạn có thể chuyển nó cùng để xác thực bằng một thứ gì đó (IE, tôi đang sử dụng mật khẩu này để yêu cầu mật khẩu xác thực với máy chủ trực tuyến). Nếu một hacker nhận xét ra dòng, chương trình sẽ chỉ đơn giản là thất bại vì máy chủ sẽ không được xác thực với nữa. Ý tưởng đằng sau việc sử dụng 'getpass()' để không ai có thể xem mã nguồn và tìm ra mật khẩu của bạn chỉ bằng cách đọc nó, và không ai có thể lấy mật khẩu của bạn bằng cách chỉ nhìn chằm chằm qua vai của bạn và đọc mật khẩu của bạn khỏi màn hình khi bạn gõ nó vào. – ArtOfWarfare

15

Sử dụng getpass cho mục đích này.

getpass.getpass - Nhắc người dùng cho một mật khẩu mà không lặp lại

76
import getpass 

pswd = getpass.getpass('Password:') 

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

+1

Cũng vì rõ ràng thêm một hệ điều hành là [giải quyết tác giả] (http://stackoverflow.com/review/suggested-edits/15845407) của bài viết, tôi sẽ chỉ đề cập đến ở đây rằng nó hoạt động trên Mac Hệ điều hành là tốt. – JakeD

1
import getpass 
p=str("null") #user's input start value 
pas=str("password") #password value 
while p!=pas: 
    p=getpass.getpass("Insert your password: ") #password input 
print("ay") #when you get the password, the output is "ay" 
+8

Bạn nên đọc [PEP 8] (https://www.python.org/dev/peps/pep-0008/) –

2
import sys 
import msvcrt 

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

print '\n'+passwor 

mã này sẽ in astrix thay vì mỗi lá thư

+1

đây là cửa sổ nhưng ít nhất nó không lặp lại câu trả lời 'getpass'. Tốt –