Khi chúng tôi sử dụng ứng dụng dựa trên thiết bị đầu cuối với một số thông tin đăng nhập bảo mật sử dụng mật khẩu trước khi thực thi ứng dụng, thì nó sẽ được thực hiện với mô-đun Python Getpass. Trong bài viết này, chúng ta sẽ xem cách sử dụng mô-đun Getpass
Mô-đun Getpass cung cấp hai chức năng
- vượt qua. getpass[]
- vượt qua. getuser[]
getpass[]
Trong nhiều chương trình, chúng tôi cần bảo mật dữ liệu hoặc chương trình thì trường hợp này chúng tôi sử dụng một số khóa bí mật hoặc mật khẩu để xác định người dùng. Sử dụng getpass[] có thể chấp nhận mật khẩu trong chương trình python
Python3
import
getpass
$ python getpass_defaults.py Password: You entered: sekret0
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret2
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret4
$ python getpass_defaults.py Password: You entered: sekret5
$ python getpass_defaults.py Password: You entered: sekret6
$ python getpass_defaults.py Password: You entered: sekret0
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret1
getpass
3getpass
4getpass
5getpass
6getpass
7getpass
8
$ python getpass_defaults.py Password: You entered: sekret5
0getpass
4
getpass
5getpass
6getpass
7
5
$ python getpass_defaults.py Password: You entered: sekret5
đầu ra
Hãy hiểu mô-đun này một số ví dụ
getpass không cần nhắc
Trong ví dụ này, chúng ta sẽ xem cách lấy mật khẩu từ người dùng và trả lại cùng một mật khẩu mà không cần nhắc
Python3
import
getpass
$ python getpass_defaults.py Password: You entered: sekret0
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret02
getpass
6getpass
7____105
$ python getpass_defaults.py Password: You entered: sekret06
đầu ra
getpass với lời nhắc
Nếu người dùng muốn một số thông báo trước khi đăng nhập như câu hỏi bảo mật thì chúng tôi sẽ sử dụng các thuộc tính nhắc trong getpass
Python3
import
getpass
$ python getpass_defaults.py Password: You entered: sekret0
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret2
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret14
$ python getpass_defaults.py Password: You entered: sekret5
$ python getpass_defaults.py Password: You entered: sekret6
$ python getpass_defaults.py Password: You entered: sekret0
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret20
getpass
4getpass
5getpass
6getpass
7
$ python getpass_defaults.py Password: You entered: sekret25
$ python getpass_defaults.py Password: You entered: sekret5
0getpass
4
getpass
5getpass
6getpass
7
$ python getpass_defaults.py Password: You entered: sekret12
$ python getpass_defaults.py Password: You entered: sekret5
đầu ra
getpass với luồng khác
Chức năng này cho phép chúng tôi truyền mật khẩu mà người dùng nhập
Python3
import
getpass
import
$ python getpass_defaults.py Password: You entered: sekret17
$ python getpass_defaults.py Password: You entered: sekret0
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret41
$ python getpass_defaults.py Password: You entered: sekret1
$ python getpass_defaults.py Password: You entered: sekret43
getpass
6getpass
7____146
$ python getpass_defaults.py Password: You entered: sekret06
đầu ra
getuser[]
Hàm này trả về tên đăng nhập hệ thống của người dùng. Nó kiểm tra biến môi trường của máy tính của bạn và lấy tên người dùng và trả về dưới dạng một chuỗi và nếu nó không thể tìm thấy biến môi trường thì ngoại lệ sẽ được đưa ra
Nhiều chương trình tương tác với người dùng thông qua thiết bị đầu cuối cần hỏi người dùng giá trị mật khẩu mà không hiển thị nội dung người dùng nhập trên màn hình. Mô-đun getpass cung cấp một cách di động để xử lý các lời nhắc mật khẩu đó một cách an toàn
Thí dụ
Hàm getpass[] in lời nhắc sau đó đọc đầu vào từ người dùng cho đến khi họ nhấn phím quay lại. Đầu vào được trả lại dưới dạng một chuỗi cho người gọi
import getpass p = getpass.getpass[] print 'You entered:', p
Lời nhắc mặc định, nếu người gọi không chỉ định, là “Mật khẩu. ”
$ python getpass_defaults.py Password: You entered: sekret
Lời nhắc có thể được thay đổi thành bất kỳ giá trị nào mà chương trình của bạn cần
import getpass p = getpass.getpass[prompt='What is your favorite color? '] if p.lower[] == 'blue': print 'Right. Off you go.' else: print 'Auuuuugh!'
Tôi không khuyên bạn nên sử dụng sơ đồ xác thực không an toàn như vậy, nhưng nó minh họa điểm
$ python getpass_prompt.py What is your favorite color? Right. Off you go. $ python getpass_prompt.py What is your favorite color? Auuuuugh!
Theo mặc định, getpass[] sử dụng thiết bị xuất chuẩn để in chuỗi dấu nhắc. Đối với một chương trình có thể tạo ra đầu ra hữu ích trên sys. thiết bị xuất chuẩn, tốt hơn hết là gửi lời nhắc đến một luồng khác, chẳng hạn như sys. tiêu chuẩn
import getpass import sys p = getpass.getpass[stream=sys.stderr] print 'You entered:', p
Bằng cách này, đầu ra tiêu chuẩn có thể được chuyển hướng [đến một đường ống hoặc tệp] mà không cần nhìn thấy lời nhắc mật khẩu. Giá trị được nhập bởi người dùng vẫn không được lặp lại màn hình
$ python getpass_stream.py >/dev/null Password:
Sử dụng getpass mà không cần Terminal
Trong Unix, getpass[] luôn yêu cầu một tty mà nó có thể điều khiển thông qua termios, do đó có thể tắt tiếng vang. Điều này có nghĩa là các giá trị sẽ không được đọc từ luồng không phải đầu cuối được chuyển hướng đến đầu vào tiêu chuẩn
$ echo "sekret" | python getpass_defaults.py Traceback [most recent call last]: File "getpass_defaults.py", line 34, in p = getpass.getpass[] File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/getpass.py", line 32, in unix_getpass old = termios.tcgetattr[fd] # a copy to save termios.error: [25, 'Inappropriate ioctl for device']
Người gọi có thể phát hiện khi nào luồng đầu vào không phải là tty và sử dụng một phương pháp thay thế để đọc trong trường hợp đó