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:
- 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.
- 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.
- 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:
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:
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 os và cryptography để tạo khóa bí mật dùng chung:
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:
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:
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:
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:
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ả
- Dữ liệu mã hóa: Tin nhắn được chuyển thành chuỗi mã hóa hexa.
- 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! 😊