Hướng dẫn encrypt config file python - mã hóa tệp cấu hình python

Tôi đang sử dụng Python 3 Tôi có tệp Auth_ini ConfigParser với tên người dùng được ánh xạ vào mật khẩu. Tôi cần mã hóa mật khẩu bằng mật khẩu để chỉ mật khẩu mới có thể giải mã nó.

Nội phân chính

  • tiền điện tử
  • Lớp Python để xử lý các phần tử được mã hóa trong tệp cấu hình. Mở rộng ConfigParser.
  • Lớp này vượt qua phương thức 'GET' của ConfigParSer thay thế nó bằng mã hóa đối xứng Fernet để bạn có thể lưu trữ mật khẩu được mã hóa một cách an toàn trong một tệp INI.
  • Ví dụ tập tin ini.
  • Mã ví dụ để phân tích ví dụ Ini ở trên. Lưu ý: Mật khẩu được mã hóa giống như không được mã hóa để chứng minh việc sử dụng. Lưu trữ crypt_key trong chương trình nên được khuyến khích. Một ví dụ tốt hơn sẽ tải khóa từ một biến môi trường.
  • Để cài đặt điều này từ Git sử dụng:
  • Gói này cài đặt một tiện ích dòng lệnh trợ giúp có tên cryptocfg.py để tạo, mã hóa và giải mã chuỗi mật khẩu fernet.
  • Cách bcrypt hoạt động
  • Mã hóa mật khẩu trong Python với BCRYPT
  • Cài đặt và thiết lập bcrypt
  • Bắt đầu mã hóa mật khẩu
  • Cách so sánh và xác nhận mật khẩu với bcrypt
  • Quy mô mã hóa với bcrypt

> Auth_INI = ConfigParser[]
> password = 'password'
> password_encrypted = encrypt[password,'password'] 
> Auth_INI['username'] = password_encrypted

Tất cả những gì nó cần phải là một số người có thể mã hóa băm khó khăn/có lẽ. Tôi không yêu cầu bất cứ điều gì quá lạ mắt. Không có khóa, chỉ là văn bản đơn giản được mã hóa/không được mã hóa.

Với sơ đồ mã hóa này, tôi có thể dễ dàng xác minh một người bằng decrypt[password,'guessword'] != 'guessword' và không có lý do gì để làm bất cứ điều gì hơn thế này.

Có ai có thể giới thiệu một thư viện mã hóa/mã hóa hoạt động như thế này không?

Ngay bây giờ tôi chỉ sử dụng URLSAFE_B64ENCODE ['Mật khẩu'] và không có mật khẩu để giải mã mật khẩu nên về cơ bản không có mã hóa cho mật khẩu. Xin hãy giúp đỡ ...

tiền điện tử

Lớp Python để xử lý các phần tử được mã hóa trong tệp cấu hình. Mở rộng ConfigParser.

Lớp này vượt qua phương thức 'GET' của ConfigParSer thay thế nó bằng mã hóa đối xứng Fernet để bạn có thể lưu trữ mật khẩu được mã hóa một cách an toàn trong một tệp INI.

Ví dụ tập tin ini.

[PARSE_TEST]
user = dmartin
password = ba$1234!
password_encoded = enc[gAAAAABa7JOds0uLwiKb44pTUvLuzbcxLsmpWL7kCFYTKX0JTW6q_JLubSKFrecCF1ShsMvzEBnt16Da_LsgUN5ff5LwB6zwPw==]

Mã ví dụ để phân tích ví dụ Ini ở trên. Lưu ý: Mật khẩu được mã hóa giống như không được mã hóa để chứng minh việc sử dụng. Lưu trữ crypt_key trong chương trình nên được khuyến khích. Một ví dụ tốt hơn sẽ tải khóa từ một biến môi trường.

from crypto_config import cryptoconfigparser
import os
import sys

if __name__ == "__main__":
    try:
        # CryptoConfigParser application encrypton string
        key = '-nBUOebi1SsnpU8k7lHym6oHSFN5Id3xM0Wezh8DHxg='

        properties = cryptoconfigparser.CryptoConfigParser[crypt_key=key]
        properties_file = os.path.dirname[__file__] + "/sample_parse.ini"
        properties.read[properties_file]
    
        user = properties.get['PARSE_TEST', 'user']
        password = properties.get['PARSE_TEST', 'password']
        password_encoded = properties.get['PARSE_TEST', 'password_encoded']
    except cryptoconfigparser.ParsingError as err:
        print['Could not parse:', err]
        sys.exit[1]

    print[f"user: {user} password: {password} decoded: {password_encoded}"]

Để cài đặt điều này từ Git sử dụng:

pip install git+//github.com/NREL/CryptoConfig.git

Gói này cài đặt một tiện ích dòng lệnh trợ giúp có tên cryptocfg.py để tạo, mã hóa và giải mã chuỗi mật khẩu fernet.

use: cryptocfg.py [options]
where options include:
	--decrypt= | -d, decrypt the string, requires -i and -p 
	--encrypt= | -e, encrypt the string, requires -i and -p 
	--input= | -i, string to encrypt or decrypt, if not supplied read from stdin
	--password= | -p, key for encrypting or decrypting a string, if not supplied will be prompted for
	--genkey generate an encryption/decryption string
examples:
Encrypt:
cryptocfg.py -i 'f00Baz!1234$' -p 'jsZ9EkC3_XnP88UwIGQdFWpKPpeaD61RqJy8DE6lLYk=' -e
Decrypt:
cryptocfg.py -i 'gAAAAABa8IpcHE03lpmYYhptWlkOqKMvstpbYlHqp9Asq5qVY024X7OhokVto2aF_uzCRP47OVdHT5VE6f32xIvvoMlDX3_Ceg==' -p 'jsZ9EkC3_XnP88UwIGQdFWpKPpeaD61RqJy8DE6lLYk=' -d

Cách bcrypt hoạt động

Mã hóa mật khẩu trong Python với BCRYPT

Cài đặt và thiết lập bcrypt

Bắt đầu mã hóa mật khẩu

Cách so sánh và xác nhận mật khẩu với bcrypt

Quy mô mã hóa với bcrypt

Tất cả những gì nó cần phải là một số người có thể mã hóa băm khó khăn/có lẽ. Tôi không yêu cầu bất cứ điều gì quá lạ mắt. Không có khóa, chỉ là văn bản đơn giản được mã hóa/không được mã hóa.

Nội phân chính

  • Cách bcrypt hoạt động
  • Mã hóa mật khẩu trong Python với BCRYPT
  • Cài đặt và thiết lập bcrypt
  • Bắt đầu mã hóa mật khẩu
  • Cách so sánh và xác nhận mật khẩu với bcrypt
  • Quy mô mã hóa với bcrypt

Nội phân chính

  • Cách bcrypt hoạt động
  • Mã hóa mật khẩu trong Python với BCRYPT
  • Cài đặt và thiết lập bcrypt
  • Bắt đầu mã hóa mật khẩu
  • Cách so sánh và xác nhận mật khẩu với bcrypt
  • Quy mô mã hóa với bcrypt

Tất cả những gì nó cần phải là một số người có thể mã hóa băm khó khăn/có lẽ. Tôi không yêu cầu bất cứ điều gì quá lạ mắt. Không có khóa, chỉ là văn bản đơn giản được mã hóa/không được mã hóa.

Cách bcrypt hoạt động

Mã hóa mật khẩu trong Python với BCRYPT

Cài đặt và thiết lập bcrypt

Bắt đầu mã hóa mật khẩubcrypt library doesn't read raw strings—byte code only. So to start, you'll first encode an incoming password string before passing it to bcrypt for encrypting.

Cách so sánh và xác nhận mật khẩu với bcrypt

Mã hóa mật khẩu trong Python với BCRYPT

Mã hóa mật khẩu BCRYPT rất dễ dàng với Python. Chúng tôi sẽ tập trung vào cách làm điều này mà không cần sử dụng khung. Nhưng không phải lo lắng, nó tuân theo quy trình tương tự trong các khung một khi bạn biết cách lưu trữ đầu vào của người dùng và đọc chúng từ cơ sở dữ liệu.

Cài đặt và thiết lập bcrypt

Nếu bạn chưa làm như vậy, hãy kích hoạt môi trường ảo Python trong root dự án của bạn. Sau đó cài đặt BCRYPT bằng PIP:pip:

pip install bcrypt

Bắt đầu mã hóa mật khẩu

Sau khi được cài đặt, hãy xem cách mã hóa một chuỗi bằng BCRYPT:

import bcrypt  
password = "mypasswordstring"

# Encode password into a readable utf-8 byte code:
password = password.encode['utf-8']

# Hash the ecoded password and generate a salt:
hashedPassword = bcrypt.hashpw[password, bcrypt.gensalt[]]
print[hashedPassword]

Khi bạn chạy mã Python ở trên, nó sẽ in một chuỗi byte được mã hóa. Tuy nhiên, đầu ra thay đổi mỗi khi bạn thực thi tập lệnh. Đây là cách BCRYPT đảm bảo mỗi người dùng có mật khẩu được mã hóa duy nhất.

Nhân tiện, đó là để mã hóa mật khẩu.

Cách so sánh và xác nhận mật khẩu với bcrypt

Điều gì sẽ xảy ra nếu bạn muốn lưu trữ mật khẩu băm và xác nhận sau đó rằng nó phù hợp với mật khẩu được cung cấp của người dùng trong quá trình xác thực?

Thật dễ dàng. Bạn chỉ cần so sánh mật khẩu xác thực với mật khẩu được lưu trong cơ sở dữ liệu [hoặc trong bộ nhớ trong trường hợp này].

Và vì BCrypt chỉ đọc chuỗi byte, bạn cũng sẽ cần mã hóa mật khẩu xác thực trước khi so sánh nó với mã trong cơ sở dữ liệu. Về bản chất, bạn sẽ kiểm tra chéo một đầu vào xác thực được mã hóa với mật khẩu băm được mã hóa đã được lưu trữ trong cơ sở dữ liệu của bạn.

Sử dụng các đầu vào Python giả, hãy xem cách thức hoạt động trong thực tế:

import bcrypt

# store your password:
password = str[input["input password: "]]

# Encode the stored password:
password = password.encode['utf-8']

# Encrypt the stored pasword:
hashed = bcrypt.hashpw[password, bcrypt.gensalt[10]]

# Create an authenticating password input field to check if a user enters the correct password
check = str[input["check password: "]]

# Encode the authenticating password as well
check = check.encode['utf-8']

# Use conditions to compare the authenticating password with the stored one:
if bcrypt.checkpw[check, hashed]:
print["login success"]
else:
print["incorrect password"]

Mã trên yêu cầu bạn nhập mật khẩu mới khi bạn thực thi nó. Python lưu trữ điều này trong bộ nhớ. Sau đó, bạn sẽ cung cấp cùng một mật khẩu [chỉ được biết đến với bạn] trong trường xác thực.

Python in một thông báo thành công nếu mật khẩu được so sánh khớp với thông báo được mã hóa trước đó. Mặt khác, nó xuất ra thông báo không thành công trong câu lệnh khác:else statement:

Toàn bộ khái niệm giống như lưu trữ mật khẩu trong cơ sở dữ liệu trong quá trình đăng ký và cung cấp nó sau trong quá trình xác thực.

Quy mô mã hóa với bcrypt

Mặc dù chúng tôi chỉ chứng minh cách BCRYPT hoạt động bằng cách lưu trữ mật khẩu được mã hóa vào bộ nhớ ngắn Python đơn giản, việc sử dụng cuối cùng của nó nằm trong các ứng dụng cơ sở người dùng thực tế.

Tuy nhiên, hướng dẫn này cho thấy các cách cơ bản để cấu trúc mã của bạn để đạt được điều này, ngay cả trong các kịch bản thực tế. Chẳng hạn, nếu bạn đang sử dụng bình, bạn có thể thay thế các đầu vào bằng các biểu mẫu web riêng biệt để phục vụ các trường đăng ký và xác thực. Và tất nhiên, bạn sẽ lưu trữ mật khẩu được mã hóa trong cơ sở dữ liệu thực tế và đọc từ nó khi so sánh mật khẩu.

Bài Viết Liên Quan

Chủ Đề