www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home
Занимательная история, выдающиеся люди, малоизвестные факты, находки, открытия, фальсификации. Присоединяйся!

Image Steganography - Искусство сокрытия сообщений внутри изображений.

Дата публикации Oct 3, 2019

В этой статье мы рассмотрим стеганографию изображения и немного поработаем с Python.

Резюме:

I. Что такое стеганография

II. Цифровое изображение

III. Теория пикселей

Внутривенно кодирование

V. Расшифровка

Что такое стеганография

- - - - - - - - - - -

Согласно Википедиистеганографияопределяется как,

«стеганографияэто практика сокрытия файла, сообщения, изображения или видео в другом файле, сообщении, изображении или видео ». -Википедия

и словостеганографияобъединяетгреческийсловаSteganos(στεγᾰνός), что означает «скрытый или скрытый», иGraphe(γραφή) означает «написание».

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

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

Цифровое изображение

- - - - -

Прежде всего мы узнаем кое-что о цифровом изображении,

Согласно Википедии цифровое изображение определяется как,

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

Здесь мы ссылаемся на цифровые изображения на «растровая графика”, Которые в основном представляют собой матричную структуру данных, представляющую собой сетку пикселей,

Растровая графика

Теория пикселей

- - - - - -

Изображения состоят из пикселей, и каждый пиксель содержит три значения (мы работаем с цветовой моделью RGB), Red-R, Green-G, Blue-B, каждое значение RGB 8-битное, а самые правые биты менее значимы и самые левые биты являются наиболее значимыми битами.

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

кодирование

- - - - -

Каждый байт данных преобразуется в его 8-битный двоичный код с использованием значений ASCII. Теперь пиксели читаются слева направо в группе из 3, содержащих всего 9 значений. Первые 8 значений используются для хранения двоичных данных. Значение становится нечетным для 1 и даже для 0. Мы должны проверить, чтобы убедиться, что есть достаточно места для хранения сообщения в носителе.

Декодирование

- - - -

Пока сообщение не закончится, три пикселя считываются за раз, что означает, что последнее значение является нечетным. Каждые 3 пикселя содержат двоичные данные, которые можно извлечь с помощью одной и той же логики кодирования.

Начать работать

- - - - - -

Мы будем использовать библиотеку PIL (python), чтобы получить некоторую информацию, такую ​​как тип изображения и размер, для продолжения процесса.

  1. Импорт PIL и преобразование данных
#we have to import Image from PIL library, as I sadi earlier PIL used to extract the details of image, 
#specially pixels of image
from PIL import Imagedef genrateData(payload_data):

newData = []

for i in payload_data:
newData.append(format(ord(i), ‘08b’))
return newData

если у вас нет библиотеки PIL на вашем компьютере, вы должны установить с помощью этой команды.

pip установить подушку

2. Измените пиксели и поместите измененные пиксели в новое изображение, здесь значение Pixel должно быть нечетным для 1 и четным для 0

#def modPix(pixel, payload_data): 
datalist = genrateData(payload_data)
lendata = len(datalist)
imdata = iter(pixel)

for i in range(lendata): pixel = [value for value in imdata.__next__()[:3] + imdata.__next__()[:3] +
imdata.__next__()[:3]] for j in range(0, 8):
if (datalist[i][j]==’0') and (pixel[j]% 2 != 0):

if (pixel[j]% 2 != 0):
pixel[j] -= 1

elif (datalist[i][j] == '1') and (pixel[j] % 2 == 0):
pixel[j] -= 1 if (i == lendata - 1):
if (pixel[-1] % 2 == 0):
pixel[-1] -= 1
else:
if (pixel[-1] % 2 != 0):
pixel[-1] -= 1pixel = tuple(pixel)
yield pixel[0:3]
yield pixel[3:6]
yield pixel[6:9]def encode_enc(newImage, payload_data):
w = newImage.size[0]
(x, y) = (0, 0)

for pixel in modPix(newImage.getdata(), payload_data):

#Putting modified pixels in the new image
newImage.putpixel((x, y), pixel)
if (x == w - 1):
x = 0
y += 1
else:
x += 1

3. Кодирование данных

def encode(): 
img = input("Enter the image name(Eg: A.png): ")
image = Image.open(img, 'r')

payload_data = input("Enter Your Message : ")
if (len(payload_data) == 0):
raise ValueError('Please type your Message')

newImage = image.copy()
encode_enc(newImage, payload_data)

new_img_name = input("Enter a name for new image(b.png): ")
newImage.save(new_img_name, str(new_img_name.split(".")[1].upper()))

4. Расшифровка данных

def decode():
img = input("Enter image name to decode (b.png) :")
image = Image.open(img, 'r')

payload_data = ''
secretData = iter(image.getdata())

while (True):
pixels = [value for value in secretData.__next__()[:3] +
secretData.__next__()[:3] +
secretData.__next__()[:3]]
# string of binary payload_data
binstr = ''

for i in pixels[:8]:
if (i % 2 == 0):
binstr += '0'
else:
binstr += '1'

payload_data += chr(int(binstr, 2))
if (pixels[-1] % 2 != 0):
return payload_data

Наш файл готов, вы можете использовать его;)

Полный код:

Большое спасибо за чтение, пусть вы знаете ваши мысли ..!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map