Разработка проекта Python для шифрования и расшифровки информации, скрытой в изображениях

Безопасность и конфиденциальность — две основные проблемы в современном мире. Если вы хотите передать какую-то секретную информацию своему другу или семье и не хотите, чтобы другие знали об этом, как лучше всего это сделать? — В этой статье мы разработаем забавный проект Python, который может безопасно шифровать текстовую информацию в изображении, чтобы ее можно было успешно передать получателю, который сможет соответствующим образом ее расшифровать.

Искусство сокрытия информации и секретных данных в изображениях путем криптографического кодирования этой информации часто называют стеганографией. Как только секретная информация закодирована в изображении, только эксперт или конечный пользователь, получивший эти данные с помощью секретного ключа, может декодировать (или расшифровать) эту секретную информацию. Ниже приведено более формальное определение стеганографии из вики

Стеганография — это практика сокрытия сообщения внутри другого сообщения или физического объекта. В вычислительном/электронном контексте компьютерный файл, сообщение, изображение или видео скрыты внутри другого файла, сообщения, изображения или видео.

В этой статье мы будем работать над созданием забавного проекта Python, из которого мы сможем понять основы стеганографии и то, как скрыть секретную информацию в изображении. Вы можете зашифровать свои секретные данные и играть вместе с друзьями, чтобы расшифровать нужную информацию, при условии, что и отправитель, и получатель (назначение) имеют общие ключи. В следующем разделе мы подробно узнаем, как построить этот проект.

Применение сокрытия данных в изображениях:

Прежде чем мы начнем работу над проектом стеганографии, давайте рассмотрим некоторые критические приложения и варианты использования, в которых вам может пригодиться скрытие данных в изображениях.

  1. Конфиденциальное общение между двумя пользователями
  2. Защита от изменения данных
  3. Вы также можете использовать стеганографию изображений, чтобы скрыть изображение внутри изображения.
  4. Для обеспечения секретного хранения данных
  5. Система контроля доступа для распространения цифрового контента

Теперь, когда у нас есть краткое представление о некоторых вариантах использования стеганографии, мы можем перейти к следующему разделу и приступить к разработке проекта.

Разработка проекта стеганографии:

В этом разделе статьи мы узнаем, как шифровать и расшифровывать секретные текстовые данные и информацию, скрывая их внутри изображений. Мы разделим этот раздел на несколько частей, чтобы лучше понять все основные шаги, которые необходимо выполнить для успешной разработки этого проекта. Прежде чем мы начнем, убедитесь, что вы загрузили вышеуказанное изображение в свой рабочий каталог и сохранили его как «test_image» в формате .jpg. Теперь, без лишних слов, давайте приступим к проекту стеганографии.

Импорт основных библиотек:

Первым шагом для этого проекта является импорт всех основных библиотек, которые потребуются для выполнения задачи. Наиболее важным библиотечным модулем является Open-CV (cv2) для приложений компьютерного зрения, таких как манипулирование изображениями, чтение и запись изображений и другие важные операции. Библиотеку строк можно использовать для обработки строковых данных и значений ASCII. Библиотека ОС полезна для управления функциями, связанными с операционной системой, для сохранения или создания файлов в Windows или другой аналогичной платформе.

# Importing the essential libraries
import cv2
import string
import os

Если вы не полностью знакомы с библиотекой Open-CV, я настоятельно рекомендую ознакомиться с одной из моих предыдущих статей, в которой рассматриваются все основы этой концепции, по ссылке, приведенной ниже. Получение знаний об этой библиотеке — один из самых важных шагов в освоении компьютерного зрения в Python.



Объявление и определение необходимых переменных и параметров:

В этом разделе статьи мы объявим все необходимые переменные и параметры для расчета проекта. Во-первых, мы объявим две структуры данных словаря, как показано в блоке кода ниже. Первый словарь будет хранить объекты ASCII в качестве ключа вместе с их соответствующими идентификаторами, а второй словарь выполняет аналогичную задачу, но наоборот. Вы можете распечатать эти два словаря, чтобы понять, как они работают.

В том же блоке кода мы можем перейти к чтению изображения, которое мы ранее сохранили в нашем рабочем каталоге как «test_image.jpg». Часто полезно анализировать параметры нашего изображения, такие как высота, ширина и количество каналов. Количество каналов изображения определяет, является ли оно изображением в градациях серого или изображением RGB. Ниже приведен блок кода для выполнения следующего действия.

# Declaring the essential Characters
dict1 = {}
dict2 = {}
for i in range(255):
    dict1[chr(i)]=i
    dict2[i]=chr(i)
# print(dict1)
# print(dict2)
# Reading and analyzing our image
img = cv2.imread("test_image.jpg")
height = img.shape[0]
width = img.shape[1]
channels = img.shape[2]
print(f"Height: {height}, Width: {width}, Number of channels: {channels}")

Выход:

Height: 3585, Width: 5378, Number of channels: 3

Если вы до сих пор следуете руководству, после запуска следующего кода вы должны получить следующие выходные параметры. Если пользователи не слишком знакомы с концепциями структур данных и словарей, я бы порекомендовал ознакомиться с одной из моих предыдущих статей, чтобы лучше ознакомиться с концепцией по ссылке ниже.



Шифрование:

Теперь, когда мы определили все необходимые переменные и параметры, мы можем приступить к добавлению зашифрованных текстовых данных в желаемое изображение. Мы введем общий ключ, который должен быть известен обоим конечным пользователям, чтобы они оба могли читать зашифрованные и расшифрованные данные. Вы можете добавить свой ключ и соответствующий текст, который хотите скрыть на изображении.

Алгоритм шифрования для этой задачи достаточно прост. Мы используем побитовую операцию между фактическим входным текстом и ключом, предоставленным со значениями словаря, которые мы ранее объявили. Определенные нами значения x, y и z используются для определения того, скрыт ли текст внутри изображения по вертикали, горизонтали или диагонали. Ключ также изменяется после каждой итерации операции модуля.

# Encryption
key = input("Enter Your Secret Key : ")
text = input("Enter text to hide In the Image : ")
kl=0
tln=len(text)
x = 0 # No of rows
y = 0 # no of columns
z = 0 # plane selection
l=len(text)
for i in range(l):
    img[x, y, z] = dict1[text[i]] ^ dict1[key[kl]]
    y = y+1
    x = x+1
    x = (x+1)%3
    kl = (kl+1)%len(key)
    
cv2.imwrite("encrypted_img.jpg", img) 
os.startfile("encrypted_img.jpg")
print("Data Hiding in Image completed successfully.")

Наконец, выполнив алгоритм шифрования, мы можем приступить к сохранению зашифрованного изображения в рабочем каталоге. Однако, как только изображение открыто, вы можете заметить, что почти невозможно заметить разницу между исходным изображением и зашифрованным изображением. Текст хорошо скрыт, и эта секретная информация в изображении может быть передана требуемому месту назначения для процесса расшифровки.

Расшифровка:

Как только информация зашифрована в соответствующем изображении, мы можем приступить к расшифровке. Обратите внимание, что успешная расшифровка может быть выполнена только в том случае, если и отправитель, и получатель имеют одинаковые входные ключи. Если получатель в пункте назначения вводит правильный ключ, выполняется алгоритм расшифровки в приведенном ниже блоке кода. Метод для этой задачи аналогичен коду шифрования, поскольку мы обращаем предыдущую операцию с побитовой операцией второго и первого словарей.

# Decryption
kl=0
tln=len(text)
x = 0 # No of rows
y = 0 # no of columns
z = 0 # plane selection
ch = int(input("\nEnter 1 to extract data from Image : "))
if ch == 1:
    key1=input("\n\nRe-enter secret key to extract text : ")
    decrypt=""
if key == key1 :
        for i in range(l):
            decrypt+=dict2[img[x, y,z] ^ dict1[key[kl]]]
            y = y+1
            x = x+1
            x = (x+1)%3
            kl = (kl+1)%len(key)
print("Encrypted text was : ", decrypt)
    else:
        print("Enter Key doesn't match the original records.")
else:
    print("Exiting the code...")

Если код (ключ) введен правильно, текстовая информация внутри изображения расшифровывается и декодируется соответствующим образом. Вы получите данные, которые изначально были зашифрованы в соответствующем образе. Однако, если у вас нет правильного ключа, программа завершит работу и сообщит вам, что был введен неверный ключ.

Окончательный результат, улучшения и будущие работы:

На приведенном выше снимке экрана показана рабочая методология следующего проекта стеганографии. Как процесс шифрования, так и процесс дешифрования, а также соответствующие ключи и текстовые данные показаны на изображении выше. Не стесняйтесь попробовать многочисленные варианты и проверить их рабочий процесс. Я настоятельно рекомендую проверить следующую ссылку GitHub, из которой была рассмотрена большая часть этого кода.

Для дальнейших улучшений было бы здорово расширить эту идею за пределы изображений, таких как файлы PDF, текстовые файлы, GIF и многое другое. Есть также несколько дополнительных элементов, которые вы можете добавить, чтобы сделать этот проект более презентабельным с помощью интерфейсов GUI. Наконец, вы можете расширить код, чтобы сделать его более сложным как для процесса шифрования, так и для расшифровки.

Криптография — обширная тема, и существует гораздо больше мер безопасности, которые необходимы пользователям для обеспечения конфиденциальности и безопасности в Интернете или в реальной жизни. Хотя такие проекты являются отличной отправной точкой, также неплохо проверить другие подобные проекты, чтобы усилить меры безопасности. Я бы предложил проверить один из моих других проектов по созданию высокозащищенных паролей с помощью Python по ссылке, указанной ниже.



Заключение:

«Я полюбил секретность. Кажется, это единственное, что может сделать современную жизнь загадочной или чудесной для нас. Самая обычная вещь восхитительна, если только ее скрывают».
Оскар Уайльд

Безопасность и конфиденциальность в современном мире имеют первостепенное значение. Чтобы гарантировать, что каждый человек имеет доступ к безопасному и надежному доступу к многочисленным повседневным утилитам, таким как Интернет, кредитные или дебетовые карты, телефоны и другое подобное оборудование, исследуются огромные разработки для обеспечения такой безопасности. Стеганография с кодированием Python — один из многих таких забавных проектов, где вы можете скрыть некоторую секретную информацию внутри изображений и поделиться данными.

В этой статье мы разобрались с некоторыми основными концепциями сокрытия данных в изображениях и стеганографии. Мы также получили необходимые знания о библиотеке компьютерного зрения для выполнения такого проекта. Я бы порекомендовал попробовать многочисленные варианты этого проекта и протестировать различные возможности, весело проводя время, экспериментируя и исследуя.

Если вы хотите получать уведомления о моих статьях, как только они появляются, перейдите по следующей ссылке, чтобы подписаться на рекомендации по электронной почте. Если вы хотите поддержать других авторов и меня, подпишитесь на ссылку ниже.



Если у вас есть какие-либо вопросы, связанные с различными пунктами, изложенными в этой статье, не стесняйтесь, дайте мне знать в комментариях ниже. Я постараюсь вернуться к вам с ответом как можно скорее.

Ознакомьтесь с некоторыми другими моими статьями по теме, затронутой в этой статье, которые, возможно, вам также понравится читать!







Всем спасибо, что дочитали до конца. Надеюсь, всем вам понравилось читать статью. Желаю всем прекрасного дня!