Cách sử dụng getpass trong Python

Khi bạn tạo một số chương trình python cần bảo vệ bằng mật khẩu trước khi chương trình có thể chạy, chúng tôi sẽ nhờ sự trợ giúp của các mô-đun getpass() và getuser(). Chúng có nhiều chức năng có thể được sử dụng để quản lý bảo vệ mật khẩu cũng như truy xuất mật khẩu, v.v. Trong bài viết này, chúng ta sẽ xem cách nhập mật khẩu có và không lặp lại mật khẩu trên màn hình. Dưới đây là những cách khác nhau nó được xử lý

Với lời nhắc

Đoạn mã dưới đây được lưu vào một tệp (logon. py). 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

Thí dụ

Bản thử trực tiếp

import getpass
try:
   pwd = getpass.getpass()
except Exception as err:
   print('Error Occured : ', err)
else:
   print('Password entered :', pwd)

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

$ python logon.py
Password:
Password entered: abracadbra

Với câu hỏi bảo mật

Tiếp theo, chúng tôi có thể cải tiến mã để nhắc người dùng bằng câu hỏi bảo mật. Câu hỏi này giúp người dùng nhớ lại mật khẩu

Thí dụ

import getpass
pwd = getpass .getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
   print('You are in!')
else:
   print('Try Again')

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

$ python logon.py
'What is your favorite colour?
You are in!

Hiển thị Tên đăng nhập

Đôi khi chúng ta cần biết tên đăng nhập mà chúng ta đang sử dụng để chạy tập lệnh. Điều này đạt được bằng cách sử dụng hàm getuser()

Mô-đun Python

getpass.getpass(prompt='Password: ', stream='None')
3 cung cấp chức năng nhập mật khẩu di động và cho phép bạn chấp nhận một chuỗi đầu vào trong giao diện dòng lệnh (CLI) mà không cần nhập chuỗi để hiển thị (lặp lại) trong giao diện

Mô-đun

getpass.getpass(prompt='Password: ', stream='None')
3 cũng bao gồm chức năng
getpass.getpass(prompt='Password: ', stream='None')
0 để truy xuất tên người dùng từ các biến môi trường có liên quan

Trong hướng dẫn

getpass.getpass(prompt='Password: ', stream='None')
3 Python này, tôi sẽ chỉ cho bạn cách cài đặt
getpass.getpass(prompt='Password: ', stream='None')
3 và sử dụng chức năng, sau đó giải thích một số khái niệm cơ bản và Câu hỏi thường gặp

Làm cách nào để cài đặt Python Getpass?

Mô-đun

getpass.getpass(prompt='Password: ', stream='None')
3 là một phần của Thư viện tiêu chuẩn Python, được lưu trữ trong danh mục 'Dịch vụ hệ điều hành chung'

Điều này có nghĩa là rất có thể bạn đã có nó trong bản cài đặt Python của mình và sẽ không cần cài đặt nó nữa. Tuy nhiên, nó không phải là một chức năng tích hợp nên bạn sẽ cần phải nhập nó để sử dụng nó

Như thế này

import getpass

Cú pháp & Ví dụ

Đây là cú pháp và ví dụ để minh họa cách sử dụng mô-đun Python

getpass.getpass(prompt='Password: ', stream='None')
3

getpass.getpass(prompt='Password: ', stream='None')

getpass.getpass(prompt='Password: ', stream='None')
5 là một đối số từ khóa tùy chọn cho những gì người dùng sẽ thấy trong giao diện dòng lệnh để nhắc nhập mật khẩu của họ. Giá trị mặc định là
getpass.getpass(prompt='Password: ', stream='None')
6 sẽ hiển thị nếu bạn không đưa ra lời nhắc thay thế

Đối số từ khóa

getpass.getpass(prompt='Password: ', stream='None')
7 là để bạn chỉ định luồng mà lời nhắc được ghi vào (chỉ được sử dụng trên Unix). Nếu bạn không chỉ định luồng thay thế, giá trị mặc định của
getpass.getpass(prompt='Password: ', stream='None')
8 sẽ được chuyển và hàm
getpass.getpass(prompt='Password: ', stream='None')
9 sẽ chọn luồng phù hợp nhất cho bạn

Thí dụ

$ python logon.py
Password:
Password entered: abracadbra
2

đầu ra

Mã nhắc người dùng nhập các giá trị tại hai điểm khác nhau ‘

$ python logon.py
Password:
Password entered: abracadbra
20‘ và ‘
$ python logon.py
Password:
Password entered: abracadbra
21’ và đầu ra mã sẽ khác nhau tùy thuộc vào đầu vào

$ python logon.py
Password:
Password entered: abracadbra
5

Giải trình

Trong ví dụ này, chúng tôi bắt đầu với một từ điển có tên người dùng được ghi lại và mật khẩu tương ứng

❗ Chú ý. Mật khẩu không nên được lưu trữ dưới dạng văn bản gốc trong cơ sở dữ liệu như thế này nhưng đây chỉ là một ví dụ minh họa nhanh)

Đầu tiên, chúng tôi yêu cầu tên người dùng bằng cách sử dụng đầu vào tiêu chuẩn (tôi sẽ thảo luận về một giải pháp thay thế cho điều này bên dưới) và sau đó nếu tên người dùng được tìm thấy trong từ điển, chúng tôi sẽ yêu cầu mật khẩu tương ứng bằng hàm

getpass.getpass(prompt='Password: ', stream='None')
9

💡 Lưu ý. chúng tôi đã sử dụng tham số

getpass.getpass(prompt='Password: ', stream='None')
5 tùy chọn để nhập dấu nhắc mật khẩu tùy chỉnh của mình
$ python logon.py
Password:
Password entered: abracadbra
24

Sau đó, chương trình sẽ kiểm tra xem mật khẩu đã nhập có khớp với mật khẩu tương ứng với người dùng như được ghi trong từ điển hay không

Nếu mật khẩu khớp với tên người dùng thì thông báo thành công sẽ được in nhưng nếu mật khẩu không chính xác thì thông báo lỗi sẽ được in

Trường hợp sử dụng

Mô-đun

getpass.getpass(prompt='Password: ', stream='None')
3 chỉ để chấp nhận một chuỗi trong CLI (Giao diện dòng lệnh) mà không có chuỗi đó dội lại vào CLI khi nó được nhập

Đây có thể là bước bảo mật cơ bản đầu tiên cho bất kỳ ứng dụng CLI nào. Đây không phải là một giải pháp bảo mật đầy đủ, vì vậy nếu cần bảo vệ dữ liệu nhạy cảm, bạn nên triển khai các lớp bảo mật khác

Mô-đun này được thiết kế để chấp nhận mật khẩu nhưng bạn có thể sử dụng nó để chấp nhận bất kỳ chuỗi nào bạn muốn ẩn, chẳng hạn như câu trả lời bí mật cho một bài kiểm tra

GetPassCảnh báo

Nếu vì lý do nào đó, chức năng

getpass.getpass(prompt='Password: ', stream='None')
9 không thể ngăn CLI lặp lại mật khẩu, thì
$ python logon.py
Password:
Password entered: abracadbra
27 sẽ được kích hoạt để cảnh báo người dùng

Điều đó sẽ trông giống như thế này

import getpass
pwd = getpass .getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
   print('You are in!')
else:
   print('Try Again')
1

Hàm getuser()

Hàm

$ python logon.py
Password:
Password entered: abracadbra
28 là hàm thứ hai có sẵn trong mô-đun
getpass.getpass(prompt='Password: ', stream='None')
3. Nó được sử dụng để lấy tên người dùng từ một trong bốn biến môi trường hiện có

  • $ python logon.py
    Password:
    Password entered: abracadbra
    50
  • $ python logon.py
    Password:
    Password entered: abracadbra
    51
  • $ python logon.py
    Password:
    Password entered: abracadbra
    52
  • $ python logon.py
    Password:
    Password entered: abracadbra
    53

Nếu không có biến môi trường nào chứa chuỗi tên người dùng, thay vào đó, hàm sẽ cố gắng lấy tên người dùng từ mô-đun

$ python logon.py
Password:
Password entered: abracadbra
54
$ python logon.py
Password:
Password entered: abracadbra
55

Đây là một ví dụ về

$ python logon.py
Password:
Password entered: abracadbra
28 đang hoạt động

$ python logon.py
'What is your favorite colour?
You are in!
0

đầu ra

$ python logon.py
'What is your favorite colour?
You are in!
1

Giải trình

Trong mẫu mã này, hàm

$ python logon.py
Password:
Password entered: abracadbra
28 cố gắng trích xuất tên người dùng và sau đó chúng tôi kiểm tra xem tên người dùng đó có trong lệnh của chúng tôi không. Nếu đúng như vậy thì chúng tôi in thông báo
$ python logon.py
Password:
Password entered: abracadbra
58


Câu hỏi thường gặp Getpass

Điều đó kết thúc lời giải thích cho mô-đun

getpass.getpass(prompt='Password: ', stream='None')
3. Trong phần còn lại của bài viết, tôi sẽ xem qua một số Câu hỏi thường gặp liên quan và thông tin cơ bản

Luồng trong Python Getpass là gì?

Luồng trong máy tính là thứ có thể truyền dữ liệu giữa hai điểm cuối; . ’

Ba luồng đầu vào/đầu ra (I/O) tiêu chuẩn là

import getpass
pwd = getpass .getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
   print('You are in!')
else:
   print('Try Again')
12 (đầu vào tiêu chuẩn),
import getpass
pwd = getpass .getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
   print('You are in!')
else:
   print('Try Again')
13 (đầu ra tiêu chuẩn) và
import getpass
pwd = getpass .getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
   print('You are in!')
else:
   print('Try Again')
14 (lỗi tiêu chuẩn)

Ban đầu đây là những kết nối vật lý nhưng trong máy tính và phần mềm hiện đại, chúng được trừu tượng hóa.

Luồng giống như tệp và bạn có thể đọc/ghi dữ liệu từ luồng giống như bạn có thể làm với tệp. Chúng có liên quan đến

getpass.getpass(prompt='Password: ', stream='None')
3 vì mô-đun sẽ cố gắng sử dụng các luồng thay thế để đọc và ghi dữ liệu nếu (các) luồng mặc định không khả dụng

Theo tài liệu

getpass.getpass(prompt='Password: ', stream='None')
3

Trên Unix, lời nhắc được ghi vào luồng đối tượng giống như tệp bằng cách sử dụng trình xử lý lỗi thay thế nếu cần. luồng mặc định cho thiết bị đầu cuối điều khiển (/ dev/tty) hoặc nếu điều đó không có sẵn cho sys. stderr (đối số này bị bỏ qua trên Windows)

Nếu đầu vào không có tiếng vang không khả dụng,

getpass.getpass(prompt='Password: ', stream='None')
9 sẽ quay lại in thông báo cảnh báo để phát trực tuyến và đọc từ sys. stdin và đưa ra GetPassWarning

Một tty trong Python là gì?

Ban đầu,

import getpass
pwd = getpass .getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
   print('You are in!')
else:
   print('Try Again')
18 là tên viết tắt của thiết bị vật lý 'máy đánh chữ từ xa' kết nối máy đánh chữ với máy in băng từ xa

Ngày nay,

import getpass
pwd = getpass .getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
   print('You are in!')
else:
   print('Try Again')
19 được sử dụng để mô tả bất kỳ môi trường nhập/xuất văn bản nào có thể là vật lý hoặc trong phần mềm và gần tương đương với thuật ngữ 'thiết bị đầu cuối'. ’

'Bảng điều khiển' là phiên bản vật lý của thiết bị đầu cuối

'Trình giả lập thiết bị đầu cuối' là phiên bản phần mềm của thiết bị đầu cuối vật lý. Đây có lẽ là những gì bạn đã quen làm việc trên máy tính của mình

'Shell' là trình thông dịch dòng lệnh chạy trên thiết bị đầu cuối

Điều này có thể giúp phân biệt các thuật ngữ này nhưng lưu ý rằng chúng thường được sử dụng thay thế cho nhau

getpass trong Python là gì?

Getpass là một mô-đun để che dấu đầu vào mật khẩu để nó không bị lặp lại giao diện dòng lệnh khi nó đang được nhập. Mô-đun này cũng cung cấp hỗ trợ nhắc nhập mật khẩu và truy xuất tên người dùng của người dùng hiện tại

Getpass có trong Thư viện chuẩn Python không?

Vâng, đúng vậy. Tuy nhiên, nó không phải là một chức năng tích hợp nên bạn vẫn cần nhập nó để sử dụng nó trong mã của mình. Như thế này.

$ python logon.py
'What is your favorite colour?
You are in!
00

Làm cách nào để sử dụng mật khẩu trong Python?

Điều kiện chính để xác thực mật khẩu. .
Tối thiểu 8 ký tự
Bảng chữ cái phải nằm trong khoảng từ [a-z]
Ít nhất một bảng chữ cái phải là Chữ hoa [A-Z]
Ít nhất 1 số hoặc chữ số trong khoảng [0-9]
Ít nhất 1 ký tự từ [ _ hoặc @ hoặc $ ]

Làm cách nào để thêm mật khẩu trong Python?

Dự án Python tạo mật khẩu bảo mật cao. .
nhập ngẫu nhiên. .
in (chuỗi. in được).
char_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. #$.
print("Nhập độ dài yêu cầu của mật khẩu từ 8 đến 16. ").
nếu chiều dài >= 8 và chiều dài <= 16. .
khác. .
pip cài đặt trình tạo mật khẩu ngẫu nhiên

Getpass có trong thư viện chuẩn của Python không?

Có hai hàm được định nghĩa trong mô-đun getpass của thư viện chuẩn của Python . Chúng hữu ích bất cứ khi nào một ứng dụng dựa trên thiết bị đầu cuối chỉ cần được thực thi sau khi xác thực thông tin đăng nhập của người dùng.

Làm cách nào để sử dụng getuser trong Python?

Phương thức getuser() được sử dụng để trích xuất tên người dùng hoặc tên đăng nhập đã đăng nhập hiện tại . Để quay lại, nó kiểm tra các biến môi trường hệ thống LOGNAME , USER , LNAME và USERNAME. Nếu giá trị của cái đầu tiên được đặt, nó sẽ trả về tên đăng nhập. Nếu không, nó sẽ trả về Không có hoặc đưa ra một ngoại lệ.