Приховування даних в аудіо файлах

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

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

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

Рік:
2019
Тип роботи:
Лабораторна робота
Предмет:
Методи і засоби стеганографії
Група:
КБСТ
Варіант:
3 13 13

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра «ЗІ» ЗВІТ до лабораторної роботи №3 з курсу: «Методи і засоби стеганографії» на тему: «ПРИХОВУВАННЯ ДАНИХ В АУДІО ФАЙЛАХ» МЕТА РОБОТИ Ознайомитися із методами приховування інформації в аудіо файлах. ЗАВДАННЯ Створити проект, ввести свою програму, Запустити режим симуляції програми та перевірити правильність її функціонування. У випадку виявлення відхилень в роботі внести потрібні виправлення. ЛІСТИНГ ПРОГРАМИ import wave import struct import sys # Uses LSB hiding to embed a given set of watermark data # into a specified cover audio # Currently only supports WAV files # cover_filepath is the path to a host WAV audio file # watermark is the data to be embedded (can be any type, only the binary representation is used) # watermarked_output_path is the path for the watermarked audio data to be written to def lsb_watermark(cover_filepath, watermark_data, watermarked_output_path): watermark_str = str(watermark_data) watermark = struct.unpack("%dB" % len(watermark_str), watermark_str) watermark_size = len(watermark) watermark_bits = watermark_to_bits((watermark_size,), 32) watermark_bits.extend(watermark_to_bits(watermark)) cover_audio = wave.open(cover_filepath, 'rb') (nchannels, sampwidth, framerate, nframes, comptype, compname) = cover_audio.getparams() frames = cover_audio.readframes (nframes * nchannels) samples = struct.unpack_from ("%dh" % nframes * nchannels, frames) if len(samples) < len(watermark_bits): raise OverflowError("The watermark data provided is too big to fit into the cover audio! Tried to fit %d bits into %d bits of space." % (len(watermark_bits), len(samples))) print "Watermarking %s (%d samples) with %d bits of information." % (cover_filepath, len(samples), len(watermark_bits)) encoded_samples = [] watermark_position = 0 n = 0 for sample in samples: encoded_sample = sample if watermark_position < len(watermark_bits): encode_bit = watermark_bits[watermark_position] if encode_bit == 1: encoded_sample = sample | encode_bit else: encoded_sample = sample if sample & 1 != 0: encoded_sample = sample - 1 watermark_position = watermark_position + 1 encoded_samples.append(encoded_sample) encoded_audio = wave.open(watermarked_output_path, 'wb') encoded_audio.setparams( (nchannels, sampwidth, framerate, nframes, comptype, compname) ) encoded_audio.writeframes(struct.pack("%dh" % len(encoded_samples), *encoded_samples)) def watermark_to_bits(watermark, nbits=8): watermark_bits = [] for byte in watermark: for i in range(0,nbits): watermark_bits.append( (byte & (2 ** i)) >> i ) return watermark_bits def recover_lsb_watermark(watermarked_filepath): # Simply collect the LSB from each sample watermarked_audio = wave.open(watermarked_filepath, 'rb') (nchannels, sampwidth, framerate, nframes, comptype, compname) = watermarked_audio.getparams() frames = watermarked_audio.readframes (nframes * nchannels) samples = struct.unpack_from ("%dh" % nframes * nchannels, frames) # determine how many watermark bytes we should look for watermark_bytes = 0 for (sample,i) in zip(samples[0:32], range(0,32)): watermark_bytes = watermark_bytes + ( (sample & 1) * (2 ** i)) print "Recovering %d bytes of watermark information from %s (%d samples)" % (watermark_bytes, watermarked_filepath, len(samples)) watermark_data = [] for n in range(0, watermark_bytes): watermark_byte_samples = samples[32 + (n * 8) : 32+((n+1) * 8)] watermark_byte = 0 for (sample, i) in zip(watermark_byte_samples, range(0,8)): watermark_byte = watermark_byte + ( (sample & 1) * (2**i) ) watermark_data.append(watermark_byte) return watermark_data def watermark_to_string(list): return "".join([chr(x) for x in list]) def embed_file(cover_audio, hidden_file, output): f = open(hidden_file) hidden_data = f.read() lsb_watermark(cover_audio, hidden_data, output) def recover_embedded_file(encoded_signal, hidden_data_dest): wm = recover_lsb_watermark(encoded_signal) wm_str = watermark_to_string(wm) f = open(hidden_data_dest,"w") f.write(wm_str) if __name__ == "__main__": message = "this is an example of steganography in audio!" cover_audio = "etman.wav" output = "new.wav" if len(sys.argv) > 1: message = sys.argv[1] if len(sys.argv) > 2: cover_audio = sys.argv[2] if len(sys.argv) > 3: output = sys.argv[3] #lsb_watermark(cover_audio, message, output) embed_file(cover_audio, "1.txt", "new.wav") #recover_lsb_watermark(output) recover_embedded_file(output, "recovered.txt") Результати виконання програми Беремо wav файл і закодовуємо в нього повідомлення: Передаємо ці файли як параметри в функію вбудовування, а для видобування файлу вказуємо новий шлях recovered.txt, а початковий wav файл в шлях — new.wav Резульат виконання програми: Внаслідок було створено файл w.wav, в який вбудовано повідомлення, а також з цього файлу видобуте наше початкове повідомлення ВИСНОВОК Протягом виконання лабораторної роботи було ознайомлено з методом приховування інформації в аудіо файлах шляхом маскування цифрових водяних знаків на створено програму, що реалізує його.
Антиботан аватар за замовчуванням

04.06.2019 23:06-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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