Hôm nay, mình sẽ hướng dẫn các bạn cách áp dụng các kỹ năng mã hoá, bằng cách ẩn mật mã hay tin nhắn bí mật trong ảnh bằng Python. Steganography là kỹ thuật được sử dụng trong một thời gian khá dài. Kể từ Thế chiến II, nó được sử dụng nhiều để làm phương thức liên lạc giữa các đồng minh và ngăn chặn thông tin được kẻ thù nắm giữ bị tiết lộ. Mình sẽ hướng dẫn bạn cách thực hiện việc này bằng hai kỹ thuật khác nhau, một kỹ thuật liên quan đến secret key và cái còn lại thì không.
Yêu cầu
Các bạn cài đặt Python và sau đó tiếp tục cài đặt 2 thư viện dưới đây.
Cài đặt
pip install steganocryptopy
pip install stegano
Lưu ý: Nếu các bạn dùng Linux thì thay pip thành pip3.
Cách tin nhắn bí mật trong ảnh không cần Key
Mình sẽ ẩn văn bản trong hình ảnh mà không cần bất kỳ khoá mã hoá nào, do đó người nhận hình ảnh có thể giải mã và lấy văn bản ẩn rất dễ.
Ưu điểm
Ưu điểm của việc này là nó rất đơn giản vì thế bạn sẽ không phải giải quyết vấn đề quá phiền phức nào.
Nhược điểm
Bất kỳ ai cũng có thể giải mã miễn là họ sử dụng cùng một thư viện mà bạn đã sử dụng trong quá trình mã hóa.
Cú pháp
from stegano import lsb
secret = lsb.hide(path_to_img, secret_msg)
secret.save(ecrypted_img_name)
Bạn phải có một hình ảnh mẫu trong thư mục dự án của mình để ẩn thông báo, tiếp theo chúng ta phải cung cấp đường dẫn đến hình ảnh đã chuẩn bị.
Ví dụ
>>> from stegano import lsb
>>> secret = lsb.hide("sample.png", "Python is dangerous be careful")
>>> secret.save("sample_secret.png")
Lưu ý: Do file sample.png ở cùng thư mục với file thực thi .py nên chỉ cần ghi tên file ảnh là đủ. Nếu file ảnh khác thư mục, bạn cần phải ghi đầy đủ đường dẫn mới được.
Bây giờ nếu bạn nhìn vào thư mục dự án, bạn sẽ nhận ra có một hình ảnh mới với tên sample_secret.png. Nhìn sơ qua hoặc nhìn kỹ thì bạn cũng chẳng biết có tin nhắn ẩn trong đấy đâu, đúng không?
Giải mã
Đảm bảo rằng hình ảnh có văn bản ẩn nằm trong thư mục dự án của bạn.
Cú pháp
>>> from stegano import lsb
>>>lsb.reveal(path_to_an_image)
Ví dụ
>>> from stegano import lsb
>>>lsb.reveal('sample_secret.png')
'Python is dangerous be careful'
Xong rồi đó, bây giờ chúng ta sẽ đi sâu vào cách ẩn văn bản trong hình ảnh bằng secret key.
Cách ẩn văn bản trong hình ảnh bằng Secret Key
Mình sẽ ẩn văn bản bí mật cùng với một khóa mã hóa để giải mã nó. Do đó, chỉ người có key mới có thể giải mã nó.
Ưu điểm
Nó rất an toàn vì chỉ những người có key mới có thể giải mã nó.
Nhược điểm
Khi key mã hóa bị mất, quá trình giải mã sẽ hơi phức tạp.
Cú pháp
>>>from steganocryptopy.steganography import Steganography
>>> Steganography.generate_key(path_to_key)
>>> encrypted = Steganography.encrypt(path_to_key, path_to_img, path_to_secretfile)
>>> encrypted.save(encrypted_imgname)
Ví dụ
Giả sử mình có một tệp chứa key có tên là key, một tệp chứa thông báo ẩn có tên là classified.us và hình ảnh có tên là sample.png.
>>>from steganocryptopy.steganography import Steganography
>>> Steganography.generate_key("key")
>>> encrypted = Steganography.encrypt("key","sample.png", "classified.us")
>>> encrypted.save("Secret.png")
Bây giờ khi bạn chạy đoạn mã trên, bạn sẽ thấy một hình ảnh mới trên thư mục dự án của bạn có tên Secret.png.
Giải mã
Để giải mã hình ảnh, bạn sẽ cần tệp chứa key và hình ảnh được mã hóa của bạn.
Cú pháp
>>> from steganocryptopy.steganography import Steganography
>>> Steganography.decrypt(path_to_key, path_to_image)
Ví dụ
>>> from steganocryptopy.steganography import Steganography
>>> Steganography.decrypt("key", "Secret_img.png")
'Life is short you need Pythonn'
Chúc mừng, bạn vừa học được cách ẩn tin nhắn bí mật trong hình ảnh, Bây giờ đừng ngại chia sẻ tin nhắn với bạn bè của mình nhá.