Computer >> Máy Tính >  >> Lập trình >> Python

Cách mã hóa và giải mã dữ liệu bằng Python bằng Thư viện mật mã

Trong hướng dẫn này, bạn sẽ học cách mã hóa và giải mã dữ liệu, ví dụ:một chuỗi văn bản sử dụng thư viện mật mã trong Python.

Mã hóa là quá trình mã hóa thông tin theo cách mà chỉ các bên được ủy quyền mới có thể truy cập. Nó cho phép chúng tôi bảo vệ dữ liệu một cách an toàn mà chúng tôi không muốn bất kỳ ai xem hoặc truy cập.

Có liên quan:

  • Khái niệm cơ bản về mật mã

Trong ví dụ này, chúng tôi sẽ sử dụng mã hóa đối xứng, có nghĩa là cùng một khóa chúng tôi đã sử dụng để mã hóa dữ liệu, cũng có thể được sử dụng để giải mã.

Thư viện mật mã mà chúng tôi sử dụng ở đây được xây dựng dựa trên thuật toán AES.

Mã hóa dữ liệu bằng Python

Trước tiên, chúng ta cần cài đặt thư viện mật mã:

pip3 install cryptography

Từ thư viện mật mã, chúng ta cần nhập Fernet và bắt đầu tạo một khóa - khóa này là bắt buộc để mã hóa / giải mã đối xứng.

Tạo khóa

Để tạo khóa, chúng tôi gọi generate_key() phương pháp:

from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)

Chúng tôi chỉ cần thực hiện phương thức trên một lần để tạo khóa.

Lưu ý:Bạn cần giữ chìa khóa này ở nơi an toàn. Nếu bạn làm mất chìa khóa, bạn sẽ không thể giải mã dữ liệu đã được mã hóa bằng khóa này.

Nạp khóa

Khi chúng tôi đã tạo khóa, chúng tôi cần tải khóa trong phương thức của mình để mã hóa dữ liệu:

def load_key():
    """
    Loads the key named `secret.key` from the current directory.
    """
    return open("secret.key", "rb").read()

Mã hóa tin nhắn

Bây giờ, chúng tôi đã sẵn sàng để mã hóa một tin nhắn. Đây là quy trình ba bước:

  • 1 - mã hóa tin nhắn
  • 2 - khởi tạo lớp Fernet
  • 3 - chuyển thông điệp được mã hóa tới encrypt() phương pháp

mã hóa thông báo:

message = "message I want to encrypt".encode()

khởi chạy lớp Fernet:

f = Fernet(key)

mã hóa tin nhắn:

encrypted_message = f.encrypt(message)

Ví dụ về mã đầy đủ

Dưới đây là một ví dụ hoạt động đầy đủ về mã hóa thư trong python:

from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)

def load_key():
    """
    Load the previously generated key
    """
    return open("secret.key", "rb").read()

def encrypt_message(message):
    """
    Encrypts a message
    """
    key = load_key()
    encoded_message = message.encode()
    f = Fernet(key)
    encrypted_message = f.encrypt(encoded_message)

    print(encrypted_message)

if __name__ == "__main__":
    encrypt_message("encrypt this message")

Đầu ra:

b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4='

Giải mã dữ liệu bằng Python

Để giải mã tin nhắn, chúng ta chỉ cần gọi decrypt() phương thức từ Fernet thư viện. Hãy nhớ rằng, chúng ta cũng cần phải tải khóa vì cần có khóa để giải mã thông báo.

from cryptography.fernet import Fernet

def load_key():
    """
    Load the previously generated key
    """
    return open("secret.key", "rb").read()

def decrypt_message(encrypted_message):
    """
    Decrypts an encrypted message
    """
    key = load_key()
    f = Fernet(key)
    decrypted_message = f.decrypt(encrypted_message)

    print(decrypted_message.decode())

if __name__ == "__main__":
    decrypt_message(b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4=')

Đầu ra:

encrypt this message