Mã hóa tin nhắn bằng Python

Mã hóa tin nhắn bằng python

Mã hóa tin nhắn bằng Python

Mã hóa tin nhắn là một phương pháp giúp giữ bí mật nội dung thông điệp. Hiểu đơn giản, mã hóa tin nhắn giống như đặt thông điệp của bạn vào một “hộp bí mật” mà chỉ người nhận được phép mới có thể mở. Nếu bạn muốn tìm hiểu cách mã hóa tin nhắn bằng Python, bài viết này sẽ hướng dẫn bạn chi tiết.

Mã hóa tin nhắn là gì?

Trước khi triển khai mã hóa tin nhắn bằng Python, chúng ta hãy tìm hiểu quy trình cơ bản của mã hóa tin nhắn. Các ứng dụng nhắn tin thường tuân theo các bước sau:

  1. Chọn một khóa bí mật để mã hóa thông điệp. Đây là một mật khẩu mà chỉ người nhận dự kiến sẽ biết.
  2. Sử dụng khóa bí mật để làm rối nội dung tin nhắn, biến nó thành một chuỗi ký tự hoặc số không có ý nghĩa.
  3. Sau khi mã hóa, tin nhắn sẽ được gửi đến người nhận. Bất kỳ ai khác cố gắng đọc tin nhắn sẽ chỉ thấy chuỗi mã hóa vô nghĩa.

Mã hóa tin nhắn giống như việc tạo ra một mã bí mật mà chỉ người nhận thông điệp mới có thể hiểu.

Mã hóa tin nhắn bằng Python

Để thực hiện nhiệm vụ mã hóa tin nhắn bằng Python, chúng ta cần sử dụng thư viện cryptography. Hãy cài đặt thư viện này bằng cách chạy lệnh sau trong terminal hoặc command prompt:

PowerShell
pip install cryptography

Tạo dữ liệu tin nhắn

Chúng ta sẽ tạo một cuộc trò chuyện giả định giữa hai người, Huy và Linh, bằng một từ điển Python:

Python
message_data = {
    "Huy": [
        {"message": "Chào Linh, dạo này mọi thứ thế nào?", "time": "2023-03-21 10:30:00"},
        {"message": "Không tệ lắm, mình đang làm một số dự án lập trình. Cậu có nghe về thuật toán mã hóa mới chưa?", "time": "2023-03-21 10:35:00"},
        {"message": "Nó được gọi là AES256 và được cho là rất an toàn. Cậu muốn thử áp dụng vào tin nhắn của mình không?", "time": "2023-03-21 10:40:00"},
    ],
    "Linh": [
        {"message": "Tớ ổn, cảm ơn cậu! Còn cậu thì sao?", "time": "2023-03-21 10:32:00"},
        {"message": "Chưa, đó là gì vậy?", "time": "2023-03-21 10:37:00"},
        {"message": "Được, thử làm đi!", "time": "2023-03-21 10:42:00"},
    ]
}

Nhập các thư viện cần thiết và tạo khóa bí mật

Chúng ta sẽ sử dụng oscryptography để tạo khóa bí mật dùng chung:

Python
import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend

# Tạo khóa bí mật dùng chung
shared_secret_key = os.urandom(32)  # Khóa dài 32 byte

Hàm mã hóa tin nhắn

Hàm sau đây sẽ mã hóa tin nhắn bằng thuật toán AES:

Python
def encrypt_message(message, key):
    iv = os.urandom(16)  # Tạo vector khởi tạo ngẫu nhiên
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    encryptor = cipher.encryptor()
    # Đệm tin nhắn để đảm bảo độ dài là bội số của 16
    padded_message = message + (16 - len(message) % 16) * chr(16 - len(message) % 16)
    ciphertext = encryptor.update(padded_message.encode()) + encryptor.finalize()
    return iv + ciphertext

Hàm giải mã tin nhắn

Hàm sau sẽ giúp giải mã tin nhắn mã hóa, trả về thông điệp ban đầu:

Python
def decrypt_message(ciphertext, key):
    iv = ciphertext[:16]  # Vector khởi tạo là 16 byte đầu tiên
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()
    padded_message = decryptor.update(ciphertext[16:]) + decryptor.finalize()
    # Loại bỏ phần đệm
    return padded_message[:-padded_message[-1]].decode()

Mã hóa dữ liệu tin nhắn

Chúng ta sẽ mã hóa từng tin nhắn trong từ điển:

Python
for person, messages in message_data.items():
    for message in messages:
        encrypted_message = encrypt_message(message["message"], shared_secret_key)
        message["message"] = encrypted_message.hex()  # Lưu dạng chuỗi hexa

print("Dữ liệu tin nhắn đã được mã hóa:")
print(message_data)

Giải mã dữ liệu tin nhắn

Sau khi mã hóa, chúng ta cũng có thể giải mã để kiểm tra tính toàn vẹn của dữ liệu:

Python
for person, messages in message_data.items():
    for message in messages:
        ciphertext = bytes.fromhex(message["message"])
        decrypted_message = decrypt_message(ciphertext, shared_secret_key)
        message["message"] = decrypted_message

print("Dữ liệu tin nhắn sau khi giải mã:")
print(message_data)

Kết quả

  1. Dữ liệu mã hóa: Tin nhắn được chuyển thành chuỗi mã hóa hexa.
  2. Dữ liệu giải mã: Tin nhắn được giải mã trở về nội dung ban đầu, đảm bảo chỉ người có khóa bí mật mới đọc được.

Tóm tắt

Mã hóa tin nhắn giúp bảo vệ nội dung thông điệp khỏi những người không được phép truy cập. Bằng Python và thư viện cryptography, bạn có thể dễ dàng triển khai mã hóa và giải mã dữ liệu. Hãy thử áp dụng và nâng cao tính bảo mật cho ứng dụng của bạn ngay hôm nay! 😊

Tham khảo thêm các khóa học của tôi về python

  • Học lập trình python thông qua lập trình một game: UnicaGitiho

Leave a Reply