Основні алгоритми стеганографії

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Інші
Предмет:
Інші

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ З В І Т до лабораторних робіт №1 з курсу «Методи і засоби стеганографії» на тему: «Основні алгоритми стеганографії» МЕТА РОБОТИ Ознайомитися з основними алгоритмами стеганографії. ТЕОРЕТИЧНІ ВІДОМОСТІ Формат bmp-файлу Формат bmp (від англ. BitMaP – бітова карта або бітовий масив) представляє нестиснуте (в основному) зображення. Цей файл складається з чотирьох частин: заголовку, інформаційного заголовку, таблиці кольорів (палітри) і даних зображення. Якщо у файлі зберігається зображення з глибиною кольору 24 біта (truecolor), то таблиця кольорів може бути відсутня. Приховування даних в просторовій області Цифрова стеганографія включає в себе наступні напрямки: вбудовування інформації з метою її прихованої передачі; вбудовування цифрових водяних знаків (ЦВЗ) (watermarking); вбудовування ідентифікаційних номерів (fingerprinting); вбудовування заголовків (captioning). Алгоритми, що описуються в даному пункті, впроваджують ЦВЗ в області вихідного зображення. Їх перевагою є те, що для введення ЦВЗ немає необхідності виконувати обчислювально громіздкі лінійні перетворення зображень. ЦВЗ вводяться за рахунок маніпуляцій яскравістю l(x,y) або колірними складовими (r(x,y),b(x,y),g(x,y)). Алгоритм LSB LSB (Least Significant Bit, найменший значущий біт) - суть цього методу полягає в заміні останніх значущих бітів в контейнері на біти приховуваного повідомлення. Різниця між порожнім і заповненим контейнерами повинна бути не відчутна для органів сприйняття людини. Суть методу полягає в наступному: Припустимо, є 8-бітове зображення в градаціях сірого. 00h (00000000b) позначає чорний колір, FFh (11111111b) - білий. Усього є 256 градацій. Також припустимо, що повідомлення складається з 1 байта - наприклад, 01101011b. При використанні 2 молодших біт в описах пікселів, нам буде потрібно 4 пікселя. Припустимо, вони чорного кольору. Тоді пікселі, що містять приховане повідомлення, будуть виглядати наступним чином: 00000001 00000010 00000010 00000011. Тоді колір пікселів зміниться: першого - на 1 / 255, другого і третього - на 2 / 255 і четвертого - на 3 / 255. Такі градації, мало того що непомітні для людини, можуть взагалі не відобразитися при використанні низькоякісних пристроїв виводу. Розглянемо ще один приклад. Кожен колір (піксель) кодується одним байтом (8 біт). У нас таких кольору три (червоний, синій, зелений) разом 3 байти (24 біта). Щоб записати нашу інформацію і при цьому не спотворити зображення, запишемо дані в молодші біти кольорів зображення. Тобто ми візьмемо піксел, розберемо його на складові кольору і замінимо молодші біти бітами нашого повідомлення. Це 1 байт нашого повідомлення: 10101010 Це RGB нашого пікселя: R: 11110000 G: 00001000 B: 11001000 Замінимо молодші біти і отримаємо новий піксель: R: 11110010 G: 00001101 B: 11001010 Дана операція не внесе до зображення помітних людському оку спотворень. Методи LSB є нестійкими до всіх видів атак і можуть бути використані тільки при відсутності шуму в каналі передачі даних. Виявлення LSB-кодованого стего здійснюється з аномальних характеристикам розподілу значень діапазону молодших бітів відліків цифрового сигналу. Розрахунок кількості можливих сиволів з розрахунку 1 біта в байті N= Ширина(пікселі)* Довжина(пікселі)*3(R,G,B)/8 Розрахунок кількості можливих сиволів з розрахунку 2 біта в байті N= Ширина(пікселі)* Довжина(пікселі)*6(R,G,B)/8 Розрахунок кількості можливих сиволів з розрахунку 3 біта в байті N= Ширина(пікселі)* Довжина(пікселі)*9(R,G,B)/8 Розрахунок кількості можливих сиволів з розрахунку 4 біта в байті N= Ширина(пікселі)* Довжина(пікселі)*12(R,G,B)/8 Блок схема Код Програми import Image # Функція, яка реалізує меню програми і запускає інші потрібні для виконання роботи програми функції def main(): print "Hi, user" while True: print "What do you want to do?" vidpovid=raw_input("""1 - cript 2 - decript 3 - Exit """) if vidpovid=="1": way=raw_input( "Give the way: ") print "Posible count of symbol:",kilkist_simvolov(way) text=raw_input("Print a text:") coder(text,way) break elif vidpovid=="2": way=raw_input( "Give the way: ") k=get(way) print "Decoded text is:",k mission() break elif vidpovid=="3": break else: print "Vvedit pravelniy nomer" #Функція, яка переводить стрічковий тип в потік бітів def z_string_v_bit(string): k='' for x in string: l=bin(ord(x)) l=l[2:] while len(l)<=7: l="0"+l k+=l return k+'011000000110000001100000' # Функція, яка переводить потік бітів в стрічковий тип def z_bit_v_string(bit): k="" while len(bit)>0: s=bit[0:8] m=chr(int(("0b"+s),2)) k+=m if len(bit)<9: break bit=bit[8:] return k #Функція, яка вираховує кількість можливих для запису символів у картинці def kilkist_simvolov(way): z=-1 Im = Image.open(way) k=Im.format p=Im.mode if k!="BMP" and p!="RBG": return z l=Im.size z=l[0]*l[1]*3*2/10-3 return z # Функція, яка конвертує цілі числа(0-255) в біти def konverter(r,g,b): k=["","",""] s=0 l=[r,g,b] for x in l: m=bin(x) k[s]=m k[s]=k[s] if len(k[s][0:2])<8: k[s]=k[s][2:] while len(k[s])<=7: k[s]="0"+k[s] k[s]="0b"+k[s][:-2] s+=1 return k[0],k[1],k[2] def mission(): print "Mission is done" #Функція, яка міняє останні біти def put(rb,gb,bb, dani): l=[rb,gb,bb] k=["","",""] s=0 for x in l: k[s]=x+dani[0:2] dani=dani[2:] s+=1 return k[0],k[1],k[2],dani #Функція, яка кодує повідомлення в картинку def coder(text,way): Im = Image.open(way) rgb_im = Im.convert('RGB') l=Im.size string=text dani=z_string_v_bit(string) for x in range(1,l[0]): for y in range(1,l[1]): r, g, b = rgb_im.getpixel((x, y)) rb,gb,bb=konverter(r,g,b) if dani=="": Im.save(way,"BMP") return mission() rb,gb,bb,dani=put(rb, gb,bb,dani) Im.putpixel((x,y),(int(rb,2),int(gb,2),int(bb,2))) #Функція, яка декодує повідомлення з картинки def get(way): Im = Image.open(way) dani="" text='' rgb_im = Im.convert('RGB') l=Im.size for x in range(1,l[0]): for y in range(1,l[1]): r, g, b = rgb_im.getpixel((x, y)) r, g, b=dekonverter(r,g,b) s=r[-2:]+g[-2:]+b[-2:] dani+=s if dani.find("011000000110000001100000")>-1: dani=dani[0:dani.find("011000000110000001100000")] k=z_bit_v_string(dani) return k def dekonverter(r,g,b): k=["","",""] s=0 l=[r,g,b] for x in l: m=bin(x) k[s]=m if len(k[s][0:2])<8: k[s]=k[s][2:] while len(k[s])<=7: k[s]="0"+k[s] k[s]="0b"+k[s] s+=1 return k[0],k[1],k[2] main() Шифрування останніх 2 біт  Шифрування 4 останніх біт  Результат роботи програми Зашифрування  Розшифрування  Висновок: Під час виконання даної роботи я навчився працювати з графічними бібліотеками Python, вивчив основні методи приховування інформації в зображенні.
Антиботан аватар за замовчуванням

02.06.2013 12:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!