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

Steganography dựa trên hình ảnh bằng Python?

Steganography là một kỹ thuật che giấu thông tin đằng sau hiện trường. Nó không giống như mật mã tập trung vào việc mã hóa dữ liệu (thông qua các thuật toán khác nhau như SHA1, MD5, v.v.), steganography tập trung nhiều hơn vào việc ẩn dữ liệu (dữ liệu có thể là tệp, hình ảnh, tin nhắn hoặc video) trong một tệp, hình ảnh, tin nhắn hoặc video khác để tránh bất kỳ sự hấp dẫn nào.

Vì vậy, trong phần này, chúng tôi sẽ cố gắng tạo một chương trình python đơn giản để ẩn thông tin đằng sau hình ảnh mà không có những thay đổi đáng chú ý về giao diện của hình ảnh. Có hai phần chính của chương trình - đầu tiên là chức năng giải mã có thể trích xuất thông tin bí mật từ tệp hình ảnh và thứ hai là chức năng mã hóa sẽ mã hóa thông điệp bí mật thành hình ảnh.

Chúng tôi sử dụng thư viện Python Pillow cho mục đích này (bạn có thể openCv hoặc những thứ khác nữa ☺). Bạn có thể cài đặt nó bằng cách sử dụng pip, chỉ cần chạy pip install gối trong dấu nhắc lệnh của bạn:

$pip install pillow

Các khái niệm cơ bản về Pixel và mô hình màu:

Điểm ảnh là phần tử riêng lẻ nhỏ nhất của hình ảnh. Vì vậy, mỗi pixel đại diện cho một phần của hình ảnh gốc. Nó có nghĩa là, cao hơn pixel-cao hơn hoặc nhiều hơn các mô tả chính xác của hình ảnh thực tế.

Trong hình ảnh đen trắng (không phải thang độ xám), pixel đen có giá trị 1 và pixel trắng có giá trị là 0. Trong khi ở hình ảnh màu, chúng có ba thành phần màu chính (RGB-Red, Green, Blue), với pixel giá trị 0-255 cho mỗi pixel. Vì vậy, một pixel của (255, 255, 255) sẽ đại diện cho màu trắng và (0,0,0) có nghĩa là màu đen. Vì số tối đa mà một số nhị phân 8 bit có thể đại diện cho 255, là số tối đa chúng ta có thể sử dụng.

Vì cơ số của số nhị phân là 2, chúng ta có thể chuyển đổi số nhị phân thành số thập phân rất dễ dàng. Giả sử, số nhị phân của chúng ta là 01010101, thì số thập phân tương đương của nó (cơ số 10) sẽ là:

26 +24 + 22 + 20 = 64 + 16 + 4 + 1 = 85

Bạn có thể kiểm tra ở trên - chuyển đổi từ nhị phân sang thập phân trong thiết bị đầu cuối python của bạn.

>>> print(0b01010101)
85
>>> type(0b01010101)
<class 'int'>
>>> 0b01010101
85
>>> 0b01010110
86

Làm thế nào chúng ta đạt được nó:

Step 1: Import the required library/package.
Step 2: Open the file or Image
Step 3: Encode some text into the source Image & then save it.
Step 4: Check both the images (with and without hidden data file) and see if there is any visible changes.
Step 5: Decode the image- to extract data from the image

Thực hiện các bước trên:

Mã mẫu

>>> #Import the required library
>>> from PIL import Image
>>> import stepic
>>>

Tôi đã sử dụng thư viện stepic cho mục đích mã hóa và giải mã. Bạn có thể cài đặt thư viện stepic bằng pip:

Steganography dựa trên hình ảnh bằng Python?

>>> #Open Image or file in which you want to hide your data
>>> im = Image.open('TajMahal.png')
>>>
>>> #Encode some text into your Image file and save it in another file
>>> im1 = stepic.encode(im, b'Hello Python')
>>> im1.save('TajMahal.png', 'PNG')
>>>
>>> #Now is the time to check both images and see if there is any visible changes
>>> im1 = Image.open('TajMahal.png')
>>> im1.show()

Hình ảnh có văn bản ẩn:

Steganography dựa trên hình ảnh bằng Python?

Actual image:
>>> im.show()
>>>'

Steganography dựa trên hình ảnh bằng Python?

>>>
>>> #Decode the image so as to extract the hidden data from the image
>>> im2 = Image.open('TajMahal.png')
>>> stegoImage = stepic.decode(im2)
>>> stegoImage
'Hello Python'

Vì vậy, chúng tôi thấy dễ dàng như thế nào để ẩn văn bản đằng sau hình ảnh. Bạn có thể sử dụng các mục đầu vào khác như video hoặc các định dạng khác như jpeg và bạn có thể sử dụng các thư viện khác để cung cấp cho bạn kết quả tương tự, Happy Steganography với Python ☺.