Mật khẩu băm trong tập lệnh Python

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ẽ đượ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. định nghĩa bài văn

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ố 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 thao tác 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 pháp 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

    Sự 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

    Băm mật khẩu trong Python là gì?

    Băm mật khẩu tạo mật khẩu duy nhất cho mọi văn bản, ngay cả khi mật khẩu văn bản gốc giống nhau .

    Làm cách nào để chuyển mật khẩu vào tập lệnh Python?

    Bạn cần hỏi người dùng mật khẩu. Bạn có thể sử dụng input[] , nhưng điều đó sẽ hiển thị mật khẩu trong thiết bị đầu cuối, để tránh điều đó, bạn nên sử dụng getpass thay thế. nhập người dùng getpass = getpass. getuser[] mật khẩu = getpass .

    Làm cách nào để tạo một hàm băm trong Python?

    Ví dụ 1. Hash[] hoạt động như thế nào trong Python? .
    # băm cho số nguyên không thay đổi. print['Hash cho 181 là. ', hàm băm [181]]
    # băm cho số thập phân. print['Băm cho 181. 23 là. ',băm[181. 23]]
    # băm cho chuỗi. print['Hash cho Python là. ', hàm băm ['Trăn']]

    Làm cách nào để mã hóa mật khẩu bằng BCrypt trong Python?

    Để băm mật khẩu của bạn bằng BCrypt, trước tiên bạn phải chuyển đổi nó thành mảng byte. Để đạt được điều đó, chúng ta có thể sử dụng phương thức encode[] của lớp string . Nó sẽ mã hóa phiên bản chuỗi của mật khẩu bạn muốn băm thành một mảng byte, được cung cấp một loại mã hóa nhất định và có thể băm bằng BCrypt.

    Chủ Đề