Hướng dẫn how do i read a password from a file in python? - làm cách nào để đọc mật khẩu từ một tệp trong python?

Làm cách nào tôi có thể đọc văn bản, ví dụ: tên người dùng và mật khẩu từ từng dòng tệp trong Python? Ví dụ, tôi có thể đạt được điều này trong shell/bash:

Show
#!/bin/bash

AUTH='/authentication/account.txt'
U=$(sed -n 1p ${AUTH})
P=$(sed -n 2p ${AUTH})

và bên trong tệp /Authentication/account.txt là tên người dùng và mật khẩu của tôi theo dòng như thế này:

username
userpass

Hướng dẫn how do i read a password from a file in python? - làm cách nào để đọc mật khẩu từ một tệp trong python?

Martineau

Huy hiệu vàng 116K2525 gold badges161 silver badges286 bronze badges

Hỏi ngày 3 tháng 8 năm 2017 lúc 0:35Aug 3, 2017 at 0:35

1

Bạn không nên lưu trữ chi tiết đăng nhập chưa được mã hóa trong các tệp văn bản.

Tuy nhiên, đây là một giải pháp rất đơn giản: dù sao:

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()

Đã trả lời ngày 3 tháng 8 năm 2017 lúc 0:42Aug 3, 2017 at 0:42

Hướng dẫn how do i read a password from a file in python? - làm cách nào để đọc mật khẩu từ một tệp trong python?

Syd Lambertsyd LambertSyd Lambert

1.33714 huy hiệu bạc15 huy hiệu đồng14 silver badges15 bronze badges

8 ví dụ mã Python được tìm thấy liên quan đến "đọc mật khẩu". Bạn có thể bỏ phiếu cho những người bạn thích hoặc bỏ phiếu cho những người bạn không thích và đi đến dự án gốc hoặc tệp nguồn bằng cách theo các liên kết trên mỗi ví dụ. read password". You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example.

ví dụ 1

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 

Ví dụ 2

def read_password():
    # type: () -> Text
    if sys.stdin.isatty():
        password = getpass.getpass()
    else:
        password = stdin.readline().rstrip()
    return password 

Ví dụ 3

def read_password_file(filepath):
    """
    Read and return the user/password file.
    """
    try:
        with open(filepath, 'r') as fd:
            lines = fd.readlines()
            fd.close()
            return lines
    except IOError:
        raise ConfigurationError("Can't open password file for reading.") 

Ví dụ 4

def readPasswordLists(self):
        """
        Read passwords from all files in the given directory
        :return:
        """
        for file in os.listdir("./passlists"):
            if file.endswith(".txt"):
                passFile = os.path.join("./passlists", file)
                with open(passFile, 'r') as fh:
                    self.passwords += fh.read().splitlines() 

Ví dụ 5

def read_password(pass_file):
    if not os.path.isfile(pass_file):
        logger.error('Password file: {} not found'. format(pass_file))
        raise IOError

    passwords = []
    with open(pass_file, 'r') as pass_file:
        for password in pass_file:
            password = password.strip()
            if password:
                passwords.append(password)

    return passwords 

Ví dụ 6

def read_password(user):
    """ Read password from a password DB """
    # Using an sqlite db for demo purpose
    
    db = sqlite3.connect('passwd.db')
    cursor = db.cursor()
    try:
        passwd=cursor.execute("select password from passwds where user='%(user)s'" % locals()).fetchone()[0]
        return hashlib.sha1(passwd.encode('utf-8')).hexdigest()
    except TypeError:
        pass 

Ví dụ 7

def read_password() -> str:
    """ Read a password from the user

    """
    info(green, "> ", end="")
    return getpass.getpass(prompt="") 

Ví dụ 8

username
userpass
0

Tôi thích đóng góp cho nguồn mở, nhưng tôi muốn giữ mật khẩu của mình cho riêng mình! Python là một ngôn ngữ keo tuyệt vời để tự động hóa các tác vụ và gần đây tôi đã sử dụng nó để đăng nhập vào máy chủ web của mình bằng SFTP và tự động hóa phân tích nhật ký, quản lý tệp và cập nhật phần mềm. Các tập lệnh Python tôi đang làm việc cần biết thông tin đăng nhập của mình, nhưng tôi muốn cam kết chúng kiểm soát nguồn và chia sẻ chúng trên GitHub để tôi phải cẩn thận sử dụng một chiến lược nhằm giảm thiểu rủi ro vô tình rò rỉ các bí mật này lên Internet . Python is a great glue language for automating tasks, and recently I've been using it to log in to my web server using SFTP and automate log analysis, file management, and software updates. The Python scripts I'm working on need to know my login information, but I want to commit them to source control and share them on GitHub so I have to be careful to use a strategy which minimizes risk of inadvertently leaking these secrets onto the internet.

Bài đăng này khám phá các tùy chọn khác nhau để quản lý thông tin đăng nhập trong các tập lệnh Python trong kho công cộng. Có nhiều cách khác nhau để quản lý thông tin đăng nhập với Python, và tôi đã rất ngạc nhiên khi biết về một số cách mới khi tôi đang nghiên cứu chủ đề này. Bài đăng này xem xét các tùy chọn phổ biến nhất, bắt đầu với sự không an toàn nhất và làm việc theo cách của nó theo các phương pháp được đánh giá cao nhất để quản lý bí mật. There are many different ways to manage credentials with Python, and I was surprised to learn of some new ones as I was researching this topic. This post reviews the most common options, starting with the most insecure and working its way up to the most highly regarded methods for managing secrets.


Mật khẩu văn bản đơn giản trong mã

Nguy hiểm: Không bao giờ làm điều này Never do this

Bạn có thể đặt một mật khẩu hoặc khóa API trực tiếp trong tập lệnh Python của mình, nhưng ngay cả khi bạn có ý định xóa nó sau này, luôn có cơ hội bạn sẽ vô tình cam kết kiểm soát nguồn mà không nhận ra, gây rủi ro bảo mật mãi mãi. Phương pháp này là phải tránh bằng mọi giá!

username
userpass
1

Mật khẩu bị che khuất trong mã

Nguy hiểm: Không bao giờ làm điều này Never do this

Bạn có thể đặt một mật khẩu hoặc khóa API trực tiếp trong tập lệnh Python của mình, nhưng ngay cả khi bạn có ý định xóa nó sau này, luôn có cơ hội bạn sẽ vô tình cam kết kiểm soát nguồn mà không nhận ra, gây rủi ro bảo mật mãi mãi. Phương pháp này là phải tránh bằng mọi giá!

username
userpass
2
username
userpass
3
username
userpass
4

Mật khẩu bị che khuất trong mã

Một ý tưởng ít khủng khiếp hơn là làm xáo trộn mật khẩu văn bản đơn giản bằng cách lưu trữ chúng dưới dạng chuỗi 64 cơ sở. Bạn sẽ không biết mật khẩu chỉ bằng cách nhìn thấy nó, nhưng bất kỳ ai có chuỗi đều có thể dễ dàng giải mã nó. Các trang web như https://www.base644decode.org rất hữu ích cho việc này. This method is prone to mistakes. Ensure the text file is never committed to source control.

Mật khẩu trong các tệp văn bản đơn giản

username
userpass
5

Cảnh báo: Phương pháp này dễ bị lỗi. Đảm bảo tệp văn bản không bao giờ được cam kết kiểm soát nguồn.

Bạn có thể lưu trữ tên người dùng/mật khẩu trên hai dòng đầu tiên của tệp văn bản đơn giản, sau đó sử dụng Python để đọc nó khi bạn cần.


Nếu tệp văn bản nằm trong thư mục kho lưu trữ, bạn nên sửa đổi def read_password(prompt): while True: try: data = getpass(prompt) except EOFError: # Ctrl-d was pressed? print() continue except KeyboardInterrupt: print() raise SystemExit(1) else: # The assumption is that, since Python 3 return a Unicode string # from input(), it has Done The Right Thing with respect to # character encoding. return data 2 để đảm bảo nó không được theo dõi bởi điều khiển nguồn. Có một rủi ro là bạn có thể quên làm điều này, để lộ thông tin đăng nhập của bạn trực tuyến! Một ý tưởng tốt hơn có thể là đặt tệp bí mật bên ngoài thư mục kho lưu trữ của bạn hoàn toàn.

Có những thư viện làm cho điều này dễ dàng hơn. Một ví dụ là Python Decouple thực hiện rất nhiều logic này một cách duyên dáng và thậm chí có thể kết hợp các cài đặt từ nhiều tệp (ví dụ:

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
3 so với các tệp
def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
4) cho các môi trường có thể hưởng lợi từ các tùy chọn cấu hình nâng cao hơn. Xem các ghi chú bên dưới về các thư viện trợ giúp mà các biến môi trường và các tệp
def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
4
This method is prone to mistakes. Ensure the secrets module is never committed to source control.

Mật khẩu trong các mô -đun Python

Cảnh báo: Phương pháp này dễ bị lỗi. Đảm bảo mô -đun bí mật không bao giờ được cam kết kiểm soát nguồn.

Tương tự như một tệp văn bản thuần túy không được theo dõi bởi điều khiển nguồn (lý tưởng bên ngoài thư mục kho lưu trữ hoàn toàn), bạn có thể lưu trữ mật khẩu dưới dạng các biến trong mô -đun Python sau đó nhập nó.

username
userpass
7

username
userpass
6


Nếu tệp bí mật của bạn nằm trong một thư mục tối nghĩa, bạn sẽ phải thêm nó vào đường dẫn của mình để mô -đun có thể được tìm thấy khi nhập.

Đừng đặt tên cho mô -đun của bạn

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
6 vì mô -đun Bí mật là một phần của thư viện tiêu chuẩn và có thể sẽ được nhập vào thay thế. This method may store plain text passwords in your command history.

Mật khẩu như đối số chương trình

Cảnh báo: Phương pháp này có thể lưu trữ mật khẩu văn bản thuần túy trong lịch sử lệnh của bạn.

Đây không phải là một ý tưởng tuyệt vời vì mật khẩu được nhìn thấy trong văn bản đơn giản trong bảng điều khiển và cũng có thể được lưu trữ trong lịch sử lệnh. Tuy nhiên, bạn không có khả năng vô tình cam kết mật khẩu để kiểm soát nguồn.

username
userpass
8
username
userpass
9

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
0

Nhập mật khẩu vào bảng điều khiển

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
1

Bạn có thể yêu cầu người dùng nhập mật khẩu của họ vào bảng điều khiển, nhưng các ký tự sẽ được hiển thị khi chúng được nhập.

Python có một mô -đun GetPass trong thư viện tiêu chuẩn được thực hiện để nhắc người dùng về mật khẩu làm đầu vào bảng điều khiển. Không giống như

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
7, các ký tự không hiển thị vì mật khẩu được gõ.

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
2

Đây là một phương pháp thú vị. Nó nhanh và đơn giản, nhưng hơi kỳ quặc. Các nhược điểm là (1) nó yêu cầu mật khẩu phải ở trong bảng tạm có thể đưa nó đến các chương trình khác, (2) nó yêu cầu cài đặt thư viện không đạt tiêu chuẩn và (3) nó sẽ không dễ dàng hoạt động trong môi trường máy chủ.

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
3

Lưu ý rằng tôi tin tưởng pyperclip nhiều hơn clipboard (đó chỉ là một nhà phát triển khác kết thúc pyperclip)

Chạy sau khi sao chép mật khẩu vào bảng tạm:

Tôi thấy kỹ thuật này đặc biệt hữu ích khi tên người dùng và mật khẩu được lưu trữ trong trình quản lý mật khẩu.

Hướng dẫn how do i read a password from a file in python? - làm cách nào để đọc mật khẩu từ một tệp trong python?

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
4
f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
5

Quản lý mật khẩu với Keyring

Gói Keyring cung cấp một cách dễ dàng để truy cập dịch vụ Keyring của hệ thống từ Python. Trên MacOS, nó sử dụng Keychain, trên Windows, nó sử dụng khóa thông tin Windows và trên Linux, nó có thể sử dụng dịch vụ bí mật của Kwallet hoặc Gnome của KDE.

Nhược điểm của Keyrings là (1) nó yêu cầu một thư viện không đạt tiêu chuẩn, (2) triển khai có thể là đặc trưng của OS, (3) nó có thể không dễ dàng hoạt động trong môi trường đám mây.

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
6
f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
7
f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
8

Mật khẩu trong các biến môi trường

Các biến môi trường là một trong những cách tốt hơn để quản lý thông tin đăng nhập với Python. Có nhiều bài viết về chủ đề này, bao gồm cả cách đặt các biến môi trường và làm việc với các biến môi trường trong Python. Các biến môi trường là một trong những phương pháp quản lý thông tin ưu tiên khi làm việc với các nhà cung cấp đám mây.

Hướng dẫn how do i read a password from a file in python? - làm cách nào để đọc mật khẩu từ một tệp trong python?

Hãy chắc chắn khởi động lại phiên giao diện điều khiển của bạn sau khi chỉnh sửa các biến môi trường trước khi thử đọc chúng từ bên trong Python.

f=open("/authentication/account.txt","r")
lines=f.readlines()
username=lines[0]
password=lines[1]
f.close()
9

Có nhiều thư viện trợ giúp như Python-Dotenv và Python Decouple có thể sử dụng các tệp

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
4 cục bộ để đặt các biến môi trường động khi chương trình của bạn chạy. Như đã lưu ý trong các phần trước, khi lưu trữ mật khẩu theo văn bản đơn giản trong cấu trúc tệp của kho lưu trữ của bạn, hãy cực kỳ cẩn thận khi không cam kết các tệp này để kiểm soát nguồn!

Ví dụ

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
4 Tệp:

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
0

Gói

def read_password():
    # type: () -> Text
    if sys.stdin.isatty():
        password = getpass.getpass()
    else:
        password = stdin.readline().rstrip()
    return password 
0 có thể tải các biến
def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
4 dưới dạng biến môi trường khi tập lệnh Python chạy:

def read_password(prompt):
    while True:
        try:
            data = getpass(prompt)
        except EOFError:
            # Ctrl-d was pressed?
            print()
            continue
        except KeyboardInterrupt:
            print()
            raise SystemExit(1)
        else:
            # The assumption is that, since Python 3 return a Unicode string
            # from input(), it has Done The Right Thing with respect to
            # character encoding.
            return data 
1

Tài nguyên bổ sung

  • Sử dụng các tệp .ENV cho các biến môi trường trong các ứng dụng Python
  • Biến môi trường so với bí mật trong Python
  • Cách đặt các biến môi trường
  • Làm việc với các biến môi trường trong Python
  • Cách đặt và nhận các biến môi trường trong Python
  • Python-DOTENV đọc các cặp giá trị khóa từ tệp .ENV và có thể đặt chúng thành các biến môi trường. Nó giúp phát triển các ứng dụng theo các nguyên tắc 12 yếu tố.
  • Python Decouple giúp bạn sắp xếp các cài đặt của mình để bạn có thể thay đổi tham số mà không phải triển khai lại ứng dụng của mình.

Làm thế nào để bạn quản lý thông tin đăng nhập trong Python? Nếu bạn muốn chia sẻ phản hồi hoặc phương pháp sáng tạo mà bạn sử dụng mà tôi chưa thảo luận ở trên, hãy gửi email cho tôi và tôi có thể đưa các đề xuất của bạn vào tài liệu này.

Làm cách nào để khớp với 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 giữa [A-Z].
Ít nhất một bảng chữ cái nên có trường hợp trên [A-Z].
Ít nhất 1 số hoặc chữ số giữa [0-9] ..
Ít nhất 1 ký tự từ [_ hoặc @ hoặc $] ..

Làm thế nào để bạn sử dụng thông tin đăng nhập trong Python?

Config.py sẽ trông giống như:..
host = 'localhost', port = 8080, username = 'user' password = 'password' ....
Nhập cấu hình host = config.....
Nhập hệ điều hành hệ điều hành.....
# trả về không nếu VAR không tồn tại hệ điều hành.....
Nhập hệ điều hành Host = OS.....
nguồn .Env.....
Cài đặt PIP -U Python -Dotenv.....
từ DOTENV Nhập tải_dotenv Load_DotEnv ().

Làm cách nào để tìm tên người dùng và mật khẩu Python của tôi trong tệp văn bản?

Sau khi mở tệp, bạn có thể sử dụng readlines () để đọc văn bản vào danh sách các cặp tên người dùng/mật khẩu.Vì bạn đã tách tên người dùng và mật khẩu với một khoảng trống, mỗi cặp là chuỗi trông giống như 'na19xx myPassword', mà bạn có thể chia thành một danh sách hai chuỗi với split ().use readlines() to read the text into a list of username/password pairs. Since you separated username and password with a space, each pair is string that looks like 'Na19XX myPassword' , which you can split into a list of two strings with split() .

Làm cách nào để khớp tên người dùng và mật khẩu trong Python?

Kiểm tra với tên người dùng chính nếu tên người dùng trong mật khẩu tên người dùng: Nếu người dùng == "mert" và password == Mật khẩu tên người dùng [Tên người dùng]: in ("Chào mừng Sir")if username == "Mert" and password == username_password[username]: print("Welcome Sir") else: print("You're not authorized!")