Giới thiệu
Mật mã học (Cryptography) chuyển văn bản thường (plaintext) thành mật văn (ciphertext) = mã hóa, và ngược lại = giải mã. Dùng module fernet trong package cryptography. Fernet sinh khóa duy nhất – không có khóa thì không đọc/thao tác được dữ liệu đã mã hóa.
Cài đặt
pip install cryptography
from cryptography.fernet import Fernet
Sinh khóa
key = Fernet.generate_key() f = Fernet(key) print(key.decode()) # in khóa ra màn hình
Bq64GE--93K1RVro4go1frN-8twBSvXdbCPSPLIKz9U=
Mã hóa dữ liệu
encrypted_data = f.encrypt(b"Thông điệp này được mã hóa và không thể nhìn thấy!") print(encrypted_data)
b'gAAAAABgILy91p_wqMntdT3mDkh0IBXSLjuBMQAfnGZAFkZCX1U6Q7TU2PthgFBwVz0QbKXpuNTHRzAgbdDV4zfuuzkGCXqVD--xJdkTycKH2iurC_oqHySLc9xJEXz93LkhTbKUa5HCxfJtB-Um_YkxqjclftXXZQ=='
Lưu ý: tiền tố b chuyển sang bytes. Có thể dùng .encode() thay thế.
Giải mã dữ liệu
decrypted_data = f.decrypt(encrypted_data) print(decrypted_data.decode())
Thông điệp này được mã hóa và không thể nhìn thấy!
Lưu ý: Khóa có thể lưu file .txt để dùng lại: f = Fernet(saved_key).
Ví dụ hoàn chỉnh
from cryptography.fernet import Fernet
key = Fernet.generate_key()
print("Key:", key.decode())
f = Fernet(key)
encrypted_data = f.encrypt(b"Thông điệp này được mã hóa và không thể nhìn thấy!")
print("Sau mã hóa:", encrypted_data)
decrypted_data = f.decrypt(encrypted_data)
print(decrypted_data)
print("Sau giải mã:", decrypted_data.decode())
Kết luận
Đã học mã hóa/giải mã với cryptography. Có thể lưu khóa để mã hóa mật khẩu, giải mã verify từ DB. Xem tài liệu.