Mô-đun Python getpass
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
cũng bao gồm hàm
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
Python này, tôi sẽ chỉ cho bạn cách cài đặt getpass
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
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.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 một 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ụ
________số 8_______đầu ra
Đoạn mã nhắc người dùng nhập các giá trị tại hai điểm khác nhau ‘
import getpass users = { 'nick': '12345' } usr = input['Username: '] if usr in users: passwrd = getpass.getpass['Enter Password: '] if passwrd == users[usr]: print['Access approved'] else: print['Incorrect password, access denied'] else: print[f'User not found: {usr}']0‘ và ‘
import getpass users = { 'nick': '12345' } usr = input['Username: '] if usr in users: passwrd = getpass.getpass['Enter Password: '] if passwrd == users[usr]: print['Access approved'] else: print['Incorrect password, access denied'] else: print[f'User not found: {usr}']1’ và đầu ra mã sẽ khác nhau tùy thuộc vào đầu vào
Username Entered / Password Entered : Output
nick / 1234 : Access approved
nick / [anything other than ‘1234’] : Incorrect password, access denied
[anything other than ‘nick’] / n/a : User not found: {[user entered]}
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 cách sử dụng chức năng
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 chúng tôi
import getpass users = { 'nick': '12345' } usr = input['Username: '] if usr in users: passwrd = getpass.getpass['Enter Password: '] if passwrd == users[usr]: print['Access approved'] else: print['Incorrect password, access denied'] else: print[f'User not found: {usr}']4
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
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 đượ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ì
import getpass users = { 'nick': '12345' } usr = input['Username: '] if usr in users: passwrd = getpass.getpass['Enter Password: '] if passwrd == users[usr]: print['Access approved'] else: print['Incorrect password, access denied'] else: print[f'User not found: {usr}']7 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
GetPassWarning: Can not control echo on the terminal. passwd = fallback_getpass[prompt, stream] Warning: Password input may be echoed.
Hàm getuser[]
Hàm
import getpass users = { 'nick': '12345' } usr = input['Username: '] if usr in users: passwrd = getpass.getpass['Enter Password: '] if passwrd == users[usr]: print['Access approved'] else: print['Incorrect password, access denied'] else: print[f'User not found: {usr}']8 là hàm thứ hai có sẵn trong mô-đun
getpass
. 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ó
0Username Entered / Password Entered : Output nick / 1234 : Access approved nick / [anything other than ‘1234’] : Incorrect password, access denied [anything other than ‘nick’] / n/a : User not found: {[user entered]}
1Username Entered / Password Entered : Output nick / 1234 : Access approved nick / [anything other than ‘1234’] : Incorrect password, access denied [anything other than ‘nick’] / n/a : User not found: {[user entered]}
2Username Entered / Password Entered : Output nick / 1234 : Access approved nick / [anything other than ‘1234’] : Incorrect password, access denied [anything other than ‘nick’] / n/a : User not found: {[user entered]}
3Username Entered / Password Entered : Output nick / 1234 : Access approved nick / [anything other than ‘1234’] : Incorrect password, access denied [anything other than ‘nick’] / n/a : User not found: {[user entered]}
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
Username Entered / Password Entered : Output
nick / 1234 : Access approved
nick / [anything other than ‘1234’] : Incorrect password, access denied
[anything other than ‘nick’] / n/a : User not found: {[user entered]}
4 Username Entered / Password Entered : Output
nick / 1234 : Access approved
nick / [anything other than ‘1234’] : Incorrect password, access denied
[anything other than ‘nick’] / n/a : User not found: {[user entered]}
5Đây là một ví dụ về
import getpass users = { 'nick': '12345' } usr = input['Username: '] if usr in users: passwrd = getpass.getpass['Enter Password: '] if passwrd == users[usr]: print['Access approved'] else: print['Incorrect password, access denied'] else: print[f'User not found: {usr}']8 đang hoạt động
# USER environment variable already set by the os # os.environ['USER'] = 'nick' import getpass users = { 'nick': '12345' } usr = getpass.getuser[] if usr in users: print[f'Welcome back, {usr}']
đầu ra
Welcome back, nick
Giải trình
Trong mẫu mã này, hàm
import getpass users = { 'nick': '12345' } usr = input['Username: '] if usr in users: passwrd = getpass.getpass['Enter Password: '] if passwrd == users[usr]: print['Access approved'] else: print['Incorrect password, access denied'] else: print[f'User not found: {usr}']8 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
Username Entered / Password Entered : Output
nick / 1234 : Access approved
nick / [anything other than ‘1234’] : Incorrect password, access denied
[anything other than ‘nick’] / n/a : User not found: {[user entered]}
8Câu hỏi thường gặp Getpass
Điều đó kết thúc lời giải thích cho mô-đun getpass
. 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à
GetPassWarning: Can not control echo on the terminal. passwd = fallback_getpass[prompt, stream] Warning: Password input may be echoed.2 [đầu vào tiêu chuẩn],
GetPassWarning: Can not control echo on the terminal. passwd = fallback_getpass[prompt, stream] Warning: Password input may be echoed.3 [đầu ra tiêu chuẩn] và
GetPassWarning: Can not control echo on the terminal. passwd = fallback_getpass[prompt, stream] Warning: Password input may be echoed.4 [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
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
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 quay lại in thông báo cảnh báo để phát trực tuyến và đọc từ hệ thống. stdin và phát hành một
Một tty trong Python là gì?
Ban đầu,
GetPassWarning: Can not control echo on the terminal. passwd = fallback_getpass[prompt, stream] Warning: Password input may be echoed.8 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,
GetPassWarning: Can not control echo on the terminal. passwd = fallback_getpass[prompt, stream] Warning: Password input may be echoed.9 đượ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.
# USER environment variable already set by the os # os.environ['USER'] = 'nick' import getpass users = { 'nick': '12345' } usr = getpass.getuser[] if usr in users: print[f'Welcome back, {usr}']0