Стеганография + Python

Стеганография + Python

https://t.me/black_triangle_tg

Стеганография — это способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения).

Иными словами, если криптография скрывает саму информацию, то стеганография скрывает факт ее передачи.

Прячем наши тексты:

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

Суть модели такова:

  1. Перевести набор символов в ASCII
  2. Моддифицировать пиксели по  RGB палитре
  3. Поместить текст в случайное место изображения и сохранить как картинку.

Немного о картинке:

Итак, у нас есть изображение. В изображении есть пиксели. Пиксели образованы из основных цветов — красного, зелёного и синего.

Каждый из цветов закодирован числом от 0 до 255.

Для данных манипуляций была выбрана библиотека Pillow, вот тут подробно о ней.

А ещё у нас есть ASCII символы, которые закодированы также.

Немного текста:

Triangle best channel. Code activation 1488

Подключим необходимые библиотеки.

from PIL import Image, ImageDraw 
from random import randint 

Затем объявим функцию и поместим в ней все объекты, которые нам пригодятся.

def stega_encrypt(): 
    keys = [] 
    img = Image.open(input("path to image: ")) 
    draw = ImageDraw.Draw(img)
    width = img.size[0] 
    height = img.size[1] 
    pix = img.load() 
    f = open('keys.txt','w')

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

  1. Берем символ, переводим его в число ASCII
  2. Создаём кортеж со случайными значениями координат
  3. Собираем зелёный и синий оттенки из пикселя по координатам
  4. Заменяем красный оттенок на номер символа по ASCII
for elem in ([ord(elem) for elem in input("text here: ")]): 
    key = (randint(1,width-10),randint(1,height-10)) 
    g, b = pix[key][1:3] 
    draw.point(key, (elem,g , b)) 
    f.write(str(key)+'\n')

Cохраняем ключи и изображение.

print('keys were written to the keys.txt file') 
img.save("newimage.png", "PNG") 
f.close()

Весь код:
https://pastebin.com/kPVWyy9J
Пробуем выполнить скрипт.

В результате мы получили тоже самое изображение, но в формате png и с несколькими изменёнными пикселями.

Слева новый фаил, справа оригинал

Теперь осталось всё это как-то расшифровать.

Пишем скрипт для расшифровки!

Подключаем всё, что нужно.

from PIL import Image 
from re import findall

Объявляем функцию для расшифровки, а также несколько объектов.

def stega_decrypt(): 
    a = [] 
    keys = [] 
    img = Image.open(input("path to image: ")) 
    pix = img.load() 
    f = open(input('path to keys: '),'r') 
    y = str([line.strip() for line in f])

Основной алгоритм расшифровки:

for i in range(len(findall(r'\((\d+)\,',y))): 
    keys.append((int(findall(r'\((\d+)\,',y [i]),int(findall(r'\,\s(\d+)\)',y)[i]))) 
for key in keys: 
    a.append(pix[tuple(key)][0]) 
return ''.join([chr(elem) for elem in a])

Телега сломала табуляцию третьей строкой =(

Указанные регулярные выражения нужны для считывания кортежей из текстового файла.

Последнее действие — вывод на экран зашифрованного сообщения.

print("you message: ", stega_decrypt())

Весь код:
https://pastebin.com/KdW7Bt1x

А теперь попробуем получить наше сообщение.

Может комуто пригодится.

Report Page