Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Алгоритм LSB

Автор:   •  Февраль 2, 2019  •  Лабораторная работа  •  562 Слов (3 Страниц)  •  434 Просмотры

Страница 1 из 3

Цель: реализовать алгоритм LSB.

Листинг:

main.py

import LSB

lsb = LSB.LSB()

lsb.encode(b"C:/LSB/1.jpg", b"C:/LSB/1.txt")

lsb.decode(b"C:/LSB/1.jpg_copy.png", b"C:/LSB/out.txt")

LSB.py

mport sys

importstruct

from PIL import Image

classLSB:

        #Метод для преобразования текста в массив бит

def decompose(self, data):  

        v = []

# Представим размер текстового файла ввиде массива из 4 байт

fSize = len(data)

bytes = [b for b in struct.pack("i", fSize)]

# Добавим в массив байты символов текста

bytes += [b for b in data]

# Составим из массива байт массив бит

for b in bytes:

fori in range(7, -1, -1):

v.append((b >>i) & 1)

return v

#Метод для преобразования массива бит в текст

def assemble(self, v):

        bytes = b""

length = len(v)

foridx in range(0, len(v) // 8):

byte = 0

fori in range(0, 8):

if (idx * 8 + i< length):

byte = (byte << 1) + v[idx * 8 + i]

bytes = bytes + byte.to_bytes(1, byteorder='big')

payload_size = struct.unpack('i', bytes[0:4])[0]

return bytes[4: payload_size + 4]

        #Устанавливаетiбит x байта

defset_bit(self, n, i, x):

mask = 1 <

n&= ~mask

if x:

n |= mask

return n

#Метод для встраивания текста в изображение

def encode(self, imgFile, payload):

# Получаем исходное изображение

img = Image.open(imgFile)

(width, height) = img.size

conv = img.convert("RGBA").getdata()

print("Размер изображения: %dx%d пикселей" % (width, height))

        #Максимальный размер текста

        #1pxRGBA = 4 Байта

max_size = width * height * 3.0 / 8 / 1024 #КБайт

print("Максимальный размер текста: %.2fКБайт" % (max_size))

f = open(payload, "rb")

data = f.read()

f.close()

print("Размертекста: %.2f KB " % (len(data) / 1024.0))

# Преобразуем текст в массив бит (первые 32 бита - размер текста)

v = self.decompose(data)

        # Добавим нули чтобы размер был кратен 3

while (len(v) % 3):

v.append(0)

        # КолличествоКБайт в тексте

payload_size = len(v) / 8 / 1024.0

if (payload_size>max_size - 4):

print("Невозможно выполнить стеганографию!")

sys.exit()

        # Создаем выходное изображение

steg_img = Image.new('RGBA', (width, height))

data_img = steg_img.getdata()

# Добавляем в RGB байты в качестве последнего бита биты текста

...

Скачать:   txt (4.3 Kb)   pdf (236 Kb)   docx (52.3 Kb)  
Продолжить читать еще 2 страниц(ы) »
Доступно только на Essays.club