Trăn giấu bí mật

Python được sử dụng rộng rãi để quét web và API, xử lý cơ sở dữ liệu, gửi email và các tác vụ khác có thể liên quan đến thông tin đăng nhập, như tên người dùng hoặc mật khẩu. May mắn thay, có một số cách để ẩn mật khẩu trong tập lệnh Python, cũng như lưu trữ nhiều mật khẩu cho nhiều người dùng nếu cần. Trong bài đăng này, chúng ta sẽ nói về ba gói như vậy – keyring, passlib và cryptography, tập trung vào hai gói đầu tiên

Cách ẩn mật khẩu trong tập lệnh Python bằng khóa

keyring là một gói dễ sử dụng hoạt động bằng cách cho phép bạn lưu trữ mật khẩu trong kho thông tin đăng nhập của hệ điều hành của bạn. Nó tuyệt vời ở chỗ nó có thể hoạt động trên nhiều hệ điều hành khác nhau. Để bắt đầu, chỉ cần sử dụng pip để cài đặt

pip install keyring

Tiếp theo, hãy nhập keyring

import keyring

Khi chúng tôi đã nhập khóa, chúng tôi có thể lưu trữ kết hợp tên người dùng / mật khẩu bằng phương thức set_password. Phương pháp này có ba tham số. Đầu tiên, nó cần một “tên dịch vụ”. Đây là tên chúng tôi chọn cho bất kỳ dịch vụ nào mà tên người dùng/mật khẩu của chúng tôi được liên kết với e. g. email, cơ sở dữ liệu, v.v. Trong ví dụ của chúng tôi, chúng tôi sẽ chỉ gọi nó là "thử nghiệm". Tiếp theo, tham số thứ hai và thứ ba lần lượt là tên người dùng và mật khẩu

keyring.set_password["test", "secret_username", "secret_password"]

Để lấy lại mật khẩu, chúng ta chỉ cần sử dụng phương thức get_password với giá trị “servicename” và tên người dùng

keyring.get_password["test", "secret_username"]

Sau khi chúng tôi đặt mật khẩu, mật khẩu sẽ vẫn được hệ điều hành của chúng tôi lưu trữ – vì vậy nếu bạn bắt đầu một phiên Python mới, bạn sẽ có thể truy xuất mật khẩu như cũ

Ví dụ: giả sử rằng chúng tôi đang kết nối với cơ sở dữ liệu [đọc thêm về điều đó tại đây], nơi chúng tôi cần chuyển thông tin đăng nhập

import pyodbc

channel = pyodbc.connect["DRIVER={SQLite3 ODBC Driver};SERVER=localhost;DATABASE=sample_database.db;Uid=secret_username;Pwd=secret_password;'"]

Chúng tôi có thể thay đổi mã này để sử dụng keyring

import pyodbc
import keyring

channel = pyodbc.connect["DRIVER={SQLite3 ODBC Driver};SERVER=localhost;DATABASE=sample_database.db;Uid=secret_username;Pwd=" + keyring.get_password["test", "secret_username"] + ";"]


khóa cũng có thể hữu ích khi lên lịch cho Python một tập lệnh trong quá trình sản xuất yêu cầu mật khẩu hoặc thông tin đăng nhập

Cách băm mật khẩu với passlib

Một cách khác để bảo vệ mật khẩu trong Python là băm. Điều này có thể hữu ích nếu bạn đang xử lý việc lưu trữ nhiều mật khẩu, chẳng hạn như thông tin đăng nhập vào ứng dụng web [e. g. Flask hoặc Django]. Băm khác với mã hóa ở chỗ mã hóa hoạt động như một phương pháp 2 chiều. Bất kỳ mật khẩu nào được mã hóa đều có thể được giải mã. Mặt khác, băm hoạt động bằng cách ánh xạ một giá trị [như mật khẩu] sang một giá trị mới, được xáo trộn. Lý tưởng nhất là không nên có cách ánh xạ giá trị băm/mật khẩu trở lại giá trị/mật khẩu ban đầu

Hãy cài đặt passlib với pip

pip install passlib

Thiết lập đối tượng CryptContext

Tiếp theo, chúng ta sẽ nhập lớp CryptContext từ passlib. bối cảnh

from passlib.context import CryptContext

Bước tiếp theo là thiết lập đối tượng CryptContext của chúng tôi. Đầu tiên, để làm được điều này, chúng ta cần quyết định thuật toán băm nào chúng ta muốn sử dụng. Có nhiều khả năng ở đây, nhưng một số khả năng là do thư viện passlib

  • argon2
  • bcrypt
  • pbkdf2_sha256
  • pbkdf2_sha512
  • sha256_crypt
  • sha512_crypt

  • Một số thuật toán này yêu cầu cài đặt các gói bổ sung. Nếu bạn thử sử dụng chúng mà không có các phụ thuộc đó, bạn sẽ nhận được thông báo yêu cầu bạn cài đặt một số gói trước. Ví dụ: cần có gói argon2_cffi để sử dụng thuật toán argon2 ở trên

    Thứ hai, chúng ta cũng cần chỉ định số “vòng”. Một vòng là một tập hợp các hoạt động tạo thành một chức năng. Chức năng này sau đó được chạy nhiều lần để ánh xạ mật khẩu của chúng tôi thành phiên bản được băm. Số lượng vòng ít hơn có nghĩa là bất cứ thứ gì bạn đang băm đều không an toàn vì ít hoạt động hơn được thực hiện để xáo trộn thông tin. Tuy nhiên, số vòng cao hơn sẽ mất nhiều thời gian hơn để hoàn thành thao tác băm. Số vòng để chọn cũng phụ thuộc vào thuật toán bạn chọn. Việc chọn số vòng cho mục đích bảo mật chủ yếu liên quan đến độ chậm. e. nếu nó nhanh chóng tạo ra một hàm băm, thì việc tìm ra giá trị ban đầu cũng nhanh hơn. Các thuật toán như bcrypt và argon2 tạo ra các giá trị băm chậm hơn và do đó, thường được coi là an toàn hơn

    ________số 8_______

    Trong ví dụ đầu tiên này, chúng tôi đang sử dụng thuật toán PBKDF2-SHA256, vì đây là một lựa chọn phổ biến và thường hoạt động mà không gặp sự cố trên các hệ điều hành khác nhau. Khi đối tượng CryptContext được tạo, chúng ta có thể băm mật khẩu của mình bằng cách sử dụng phương thức băm như trên

    Cách xác minh xem mật khẩu băm có đúng không

    Để xác minh mật khẩu khớp với hàm băm tương ứng của nó, chúng ta có thể sử dụng phương thức xác minh. Phương thức xác minh không "bỏ băm" mật khẩu đã băm, mà thay vào đó, băm mật khẩu không được bảo vệ và so sánh mật khẩu đó với phiên bản đã băm

    hashed_password = context.hash["test_password"]
    
    context.verify["test_password", hashed_password]
    
    

    Tiếp theo, hãy xem một ví dụ khác. Lần này chúng ta sẽ sử dụng thuật toán argon2. Như đã đề cập ở trên, trước tiên chúng ta cần cài đặt gói argon2_cffi cho việc này. argon2 là một thuật toán tương đối mới hơn được thiết kế dành riêng cho mật khẩu băm

    import keyring
    
    
    0

    Bây giờ, chúng ta có thể tạo đối tượng CryptContext của mình

    import keyring
    
    
    1

    Gói mật mã

    Cuối cùng, hãy nói về gói mật mã. Chúng tôi có thể cài đặt gói này bằng pip

    import keyring
    
    
    2

    Tiếp theo, hãy nhập lớp Fernet từ mật mã. Điều này sẽ cho phép chúng tôi tạo khóa, sau đó chúng tôi có thể sử dụng khóa này để mã hóa mật khẩu của mình. Ghi chú. quá trình này đang thực hiện mã hóa, không băm. Như đã đề cập ở trên, băm được khuyến nghị vì nó thường an toàn hơn, nhưng mã hóa tốt hơn một chút so với lưu trữ mật khẩu ở dạng văn bản thuần túy

    import keyring
    
    
    3

    Tiếp theo, chúng tôi có thể sử dụng khóa của bạn để mã hóa mật khẩu của bạn bằng phương thức mã hóa. Lưu ý rằng mật khẩu cần được chuyển theo byte, như bên dưới

    import keyring
    
    
    4

    Cuối cùng, chúng ta có thể giải mã mật khẩu được mã hóa bằng phương pháp giải mã

    import keyring
    
    
    5

    Phần kết luận

    Đó là tất cả cho bài viết này. Trong bài viết này, chúng tôi đã đề cập đến cách ẩn mật khẩu trong tập lệnh Python bằng cách sử dụng khóa, cách băm mật khẩu bằng passlib và sự khác biệt giữa băm và mã hóa

    Trong khi bạn ở đây, hãy xem một khóa học Python trực tuyến mới mà tôi đồng tạo với 365 Data Science về quét web và API. Bạn sẽ tìm hiểu tất cả về cách quét web bằng Python, cách sử dụng API, cách loại bỏ nội dung được hiển thị bằng JavaScript [điều bắt buộc hiện nay] và hơn thế nữa. Kiểm tra nó ra ở đây

    Làm cách nào để ẩn mã Python?

    Để ẩn các ô chứa mã. .
    Mở sổ tay và chọn ô mã để ẩn
    Chèn nhận xét bằng thẻ ẩn trên dòng đầu tiên của ô mã. Đối với các ngôn ngữ Python, R và Scala, hãy nhập cú pháp sau. # @hidden_cell

    Làm cách nào để ẩn mật khẩu cơ sở dữ liệu trong tập lệnh Python?

    Đây là một phương pháp đơn giản. .
    Tạo một mô-đun python - hãy gọi nó là peekaboo. py
    trong lén lút. py, bao gồm cả mật khẩu và bất kỳ mã nào cần mật khẩu đó
    Tạo một phiên bản đã biên dịch - peekaboo. .
    Bây giờ, hãy xóa peekaboo. py
    Bây giờ bạn có thể vui vẻ nhập peekaboo chỉ dựa vào peekaboo

    Tôi có thể giấu mật khẩu ở đâu?

    10+ địa điểm để ẩn mật khẩu chính của bạn .
    Đặt nó trong két an toàn. Viết ra mật khẩu chính của bạn và đặt nó vào két an toàn [Quảng cáo] bạn giữ trong nhà. .
    Băng nó vào một cái gì đó lớn. .
    Lưu trữ nó trong một trình quản lý mật khẩu khác. .
    Giấu Nó Trong Một Cuốn Sách. .
    Ghi nó vào đĩa CD. .
    Giữ một bản sao trong hộp ký gửi an toàn. .
    Giấu nó trong xe của bạn. .
    Dưới bàn phím của bạn

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

    getpass[] và getuser[] trong Python [Mật khẩu không có tiếng vang] getpass[] nhắc người dùng nhập mật khẩu mà không có tiếng vang. Mô-đun getpass cung cấp một cách an toàn để xử lý lời nhắc mật khẩu nơi các chương trình tương tác với người dùng thông qua thiết bị đầu cuối.

    Chủ Đề