Разработка программы цифровой стеганографии
Метод наименьшего значащего бита и условия его практического применения. Классы, процедуры, функции и циклы. Общее описание программы и анализ алгоритма. Руководство пользователя программой. Извлечение информации из растрового изображение формата BitMap.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.02.2019 |
Размер файла | 2,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
4:begin Pic. Picture. LoadFromFile (path+'images/upload/pic3.png'); t:=0; end;
end;
{$ELSE}
case t of
1: Pic. Picture. LoadFromFile (path+'images\upload\pic0.png');
2: Pic. Picture. LoadFromFile (path+'images\upload\pic1.png');
3: Pic. Picture. LoadFromFile (path+'images\upload\pic2.png');
4:begin Pic. Picture. LoadFromFile (path+'images\upload\pic3.png'); t:=0; end;
end;
{$ENDIF}
end;
procedure TForm1. PicMouseEnter;
begin
{Анимируем кнопку «Загрузить изображение»}
if picloaded=false then
begin
t:=0; // Инициализируем переменную t.
Animation. Interval:=0; // Задаем интервал 0 для быстрого срабатывания.
Animation. Enabled:=true; // Включаем таймер.
// Задаем интервал 300 мс между переключением кадров анимации.
Animation. Interval:=300;
end;
end;
procedure TForm1. PicMouseLeave;
begin
{Отключаем анимацию кнопки «Загрузить изображение».}
if picloaded=false then
begin
Animation. Enabled:=false; // Отключаем таймер.
{$IFDEF Unix}
Pic. Picture. LoadFromFile (path+'images/upload/nonactive.png'); // возвращаем исходную картинку
{$ELSE}
Pic. Picture. LoadFromFile (path+'\images\upload\nonactive.png'); // возвращаем исходную картинку
{$ENDIF}
end;
end;
procedure TForm1. QuitClick;
begin
// Закрываем программу.
halt;
end;
procedure TForm1. QuitMouseEnter;
begin
{$IFDEF Unix}
Quit. Picture. LoadFromFile (path+'images/buttons/exitbtn-active.png');
{$ELSE}
Quit. Picture. LoadFromFile (path+'images\buttons\exitbtn-active.png');
{$ENDIF}
end;
procedure TForm1. QuitMouseLeave;
begin
{$IFDEF Unix}
Quit. Picture. LoadFromFile (path+'images/buttons/exitbtn.png');
{$ELSE}
Quit. Picture. LoadFromFile (path+'images\buttons\exitbtn.png');
{$ENDIF}
end;
// Процедура проверки размера контейнера и загружаемого файла.
function TForm1.check:boolean;
begin
FileSizeInBytes. Visible:=true;
FileSizeInBytes. Caption:=dcfsib+' '+IntToStr(hidingfilesize)+' Байт';
// Проверяем, что размер файла соотвествует размеру контейнера.
if ((Container. Width * Container. Height * 2) div 8)>=hidingfilesize then
begin
Result:=true;
FileSizeInBytes. Font. Color:=$00A1FF90;
end
else
begin
Result:=false;
FileSizeInBytes. Font. Color:=clRed;
end;
end;
procedure TForm1. SelectFileClick;
var s: TSearchRec;
begin
// Открываем записываемыей файл и вычисляем его размер
if HidingFileOpen. Execute then
begin
fileloaded:=true;
if FindFirst (HidingFileOpen. FileName, faAnyFile, s)=0 then
hidingfilesize:=s. Size;
FindClose(s);
check;
end
else
fileloaded:=false;
end;
end. // Конец.
Unit2.pas
(Модуль хэширования и шифрования, соответственно содержит 2 процедуры:
1) Зашифровать файл паролем пользователя с помощью алгоритма AES-256
PS: Вообще этот шаг я воплощаю в жизнь только с «превентивной» целью. Т.е обезопасить
данные в случае обнаружения.
2) Хэшировать пароль. Хэш будет md5. В качестве реализации использую
системный модуль лазаруса содержащий готовую фунцию.}
unit Unit2;
{$mode objfpc} {$H+}
interface
uses
Classes, Process, SysUtils, md5 {системный-модуль lazarus, работает ли он в Windows?};
type
TCreepy =
class
public
function HashIt (pass:string):string;
function Encrypt (apppath, pass, imagecont:string):string;
function Decrypt (apppath, pass, imagecont:string):string;
end;
var //Creepy:TCreepy;
hProcess: TProcess;
implementation
// Функция хэширования пароля
function TCreepy. HashIt (pass:string):string;
begin
Result:= MD5Print (MD5String(pass));
end;
// Функция шифрования файла
// на вход дается полный путь до файла и пароль, который ввел пользователь
// на выходе полный путь до закриптованного файла
function TCreepy. Encrypt (apppath, pass, imagecont:string):string;
begin
// Создаем объект TProcess и
// присваиваем его переменной AProcess.
hProcess:= TProcess. Create(nil);
// Сообщим AProcess сомандную строку для запуска
{$IFDEF Unix}
hProcess. CommandLine:= 'openssl aes-256-cbc - pass pass:'+pass+' - in '+imagecont+' - out '+imagecont+'.enc';
{$ELSE}
//windows
hProcess. CommandLine:= apppath+'openssl aes-256-cbc - pass pass:'+pass+' - in '+imagecont+' - out '+imagecont+'.enc';
{$ENDIF}
// Необходимо описать опции программы для запуска
// Эта опция не позволит нашей программе выполнятся до тех пор, пока
// запущенная программа не закончится
hProcess. Options:= hProcess. Options + [poWaitOnExit];
// Теперь AProcess знает командную строку
// и мы ее запускаем
hProcess. Execute;
// Пока ppc386 не прекратит работу, мы досюда не дойдем
hProcess. Free;
Result:=imagecont+'.enc'; // возвращаем путь до зашифрованного файла
end;
// Функция дешифрования
function TCreepy. Decrypt (apppath, pass, imagecont:string):string;
var sourcefile:string;
begin
// Избавляемся от расширения.enc
sourcefile:=StringReplace (imagecont, '.enc', «, [rfReplaceAll, rfIgnoreCase]);
// Создаем объект TProcess и
// присваиваем его переменной AProcess.
hProcess:= TProcess. Create(nil);
// Сообщим AProcess сомандную строку для запуска
{$IFDEF Unix}
hProcess. CommandLine:= 'openssl aes-256-cbc - pass pass:'+pass+' - d'+' - in '+imagecont+' - out '+sourcefile;
{$ELSE}
//windows
hProcess. CommandLine:= apppath+'openssl aes-256-cbc - pass pass:'+pass+' - d'+' - in '+imagecont+' - out '+sourcefile;
{$ENDIF}
{Необходимо описать опции программы для запуска
Эта опция не позволит нашей программе выполнятся до тех пор, пока
запущенная программа не закончится}
hProcess. Options:= hProcess. Options + [poWaitOnExit];
// Теперь AProcess знает командную строку и мы ее запускаем
hProcess. Execute;
// Пока ppc386 не прекратит работу, мы досюда не дойдем
hProcess. Free;
Result:=sourcefile; // возвращаем путь до зашифрованного файла
end;
end.
Unit3.pas
{программный модуль содержит класс, отвечающий за чтение / запись содержимого контейнера}
unit Unit3;
{$mode objfpc} {$H+}
interface
uses
SysUtils, Classes, Graphics, Math, Unit2;
type
TStegano =
class
public
procedure WriteBufferToContainer (MS: TStream; StartPos, Count, Val: integer; var Bmp: TBitmap);
procedure ReadBufferFromContainer (Bmp: TBitmap; StartPos, Count, Val: integer; var MS: TStream);
end;
var Creepy:TCreepy; // класс для шифрования / дешифрования / хеширования из Unit2
Stegano:TStegano; // класс содержащий процедуры записи данных из потока в контейнер
implementation
procedure TStegano. WriteBufferToContainer (MS: TStream; StartPos, Count, Val: integer; var Bmp: TBitmap);
var
Ind, Indx, Indy, Indz, Ind1, FreeSpace, Divider, NewVal: integer;
CurVal, MByte, R: byte;
begin
CurVal:=0; // Инициализируем локальную переменную.
If Val > 8 then
Exit;
If (Val mod 2 <> 0) and (Val <> 1) then
Exit;
If (MS. Size - MS. Position) < (Count - StartPos) then
Exit;
FreeSpace:= (Bmp. Width * Bmp. Height * Val) div 8;
StartPos:= StartPos * 8 div Val + 1;
If (Count - StartPos) > FreeSpace then
Exit;
MByte:= Round (Power(2, Val) - 1);
Indz:= Val;
MS. Read (CurVal, 1);
If Bmp. Width > Bmp. Height then
Divider:= Bmp. Height
else
Divider:= Bmp. Width;
for Ind1:= 0 to (Count * 8 div Val) do
begin
NewVal:= 0;
Ind:= 16;
Indx:= StartPos div Divider;
Indy:= StartPos mod Divider;
while (Ind >= 0) and (MS. Position <= StartPos + Count) do
begin
R:= Byte (Bmp. Canvas. Pixels [Indx, Indy] shr Ind);
R:= R and (255 - MByte);
R:= R or (CurVal and MByte);
NewVal:= NewVal shl 8;
NewVal:= NewVal or R;
CurVal:= CurVal shr Val;
Inc (Indz, Val);
If Indz > 8 then
begin
Indz:= Val;
MS. Read (CurVal, 1);
end;
Dec (Ind, 8);
end;
Bmp. Canvas. Pixels [Indx, Indy]:= NewVal;
Inc(StartPos);
end;
end;
procedure TStegano. ReadBufferFromContainer (Bmp: TBitmap; StartPos, Count, Val: integer; var MS: TStream);
var
Ind, Indx, Indy, Indz, Ind1, Divider: integer;
CurVal, MByte, R: byte;
begin
CurVal:= 0;
If Val > 8 then
Exit;
If (Val mod 2 <> 0) and (Val <> 1) then
Exit;
If MS = nil then
MS:= TMemoryStream. Create;
MByte:= Round (Power(2, Val) - 1);
Indz:= Val;
If Bmp. Width > Bmp. Height then
Divider:= Bmp. Height
else
Divider:= Bmp. Width;
StartPos:= StartPos * 8 div Val + 1;
for Ind1:= 0 to (Count * 8 div Val) do
begin
Ind:= 16;
Indx:= StartPos div Divider;
Indy:= StartPos mod Divider;
while (Ind >= 0) and (MS. Position <= StartPos + Count) do
begin
R:= Byte (Bmp. Canvas. Pixels [Indx, Indy] shr Ind);
R:= R and MByte;
CurVal:= CurVal or (R shl (Indz - Val));
Inc (Indz, Val);
If Indz > 8 then
begin
Indz:= Val;
MS. Write (CurVal, 1);
CurVal:= 0;
end;
Dec (Ind, 8);
end;
Inc(StartPos); end; end; end.
Размещено на Allbest.ru
...Подобные документы
Принципы компьютерной стеганографии. Классификация методов сокрытия информации. Популярность метода замены наименьшего значащего бита. Сущность методов расширения палитры и блочного сокрытия. Применение методов в GIF изображениях. Реализация алгоритмов.
курсовая работа [589,7 K], добавлен 17.02.2013Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.
курсовая работа [1,5 M], добавлен 17.01.2011Программа по созданию стрелочных часов. Минимальные требования к составу и параметрам технических средств программы. Выбор и обоснование системы программирования Microsoft Visual Studio. Общее описание алгоритма. Руководство пользователя и программиста.
контрольная работа [1017,1 K], добавлен 11.12.2012Разработка алгоритма синтеза пленочного резистора по заданным параметрам исходного резистора, программы реализации данного алгоритма на языке С++. Отладка и тестирование программы, составление документации и инструкции пользователя данной программой.
курсовая работа [1,7 M], добавлен 08.06.2009Общее описание и структура программы, ее компоненты и функции, сферы практического применения. Требования к функциональным возможностям. Характеристика логической структуры, используемые технические средства. Исследование входных и выходных данных.
курсовая работа [94,7 K], добавлен 30.01.2016Изучение особенностей растровых и векторных графических редакторов. Создание графического редактора: выбор языка программирования, разработка структуры программы и алгоритма работы. Описание интерфейса программы. Руководство программиста и пользователя.
курсовая работа [1,3 M], добавлен 28.07.2013Общая информация о графическом формате. Описание формата Microsoft Windows Bitmap. Структура файла DDВ исходного формата ВМР. Преобразования графических файлов. Просмотр и редактирование растровых изображений. Создание многодокументного приложения.
дипломная работа [1,5 M], добавлен 06.06.2010Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.
курсовая работа [1,2 M], добавлен 07.07.2012Абстрактный анализ и синтез модели предметной области. Разработка структуры, внешних и внутренних спецификаций программы. Описание программы Kurs и подпрограммы Openf, особенности и результаты их тестирования. Руководство программиста и пользователя.
курсовая работа [503,2 K], добавлен 14.07.2012Разработка алгоритма составления системы уравнений при помощи законов Кирхгофа по определенной электрической схеме. Приложение для решения данной системы методом Гаусса с выбором ведущего элемента по строке. Описание программы, руководство пользователя.
курсовая работа [435,9 K], добавлен 02.07.2010Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Применение программного обеспечения для разработки игры "Быки и коровы". Описание алгоритма и интерфейса пользователя программы. Назначение и область применения и описание возможностей программы. Рассмотрение списка сообщений об ошибках программы.
курсовая работа [799,2 K], добавлен 26.04.2021Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.
курсовая работа [823,0 K], добавлен 18.12.2011Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.
курсовая работа [812,6 K], добавлен 27.03.2012Описание входной и выходной информации. Требования к комплексу технических средств и к интерфейсу конечного пользователя. Разработка форм представления входных и выходных данных. Проектирование программных модулей. Руководство пользователя и программиста.
курсовая работа [421,6 K], добавлен 27.06.2015Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.
курсовая работа [357,1 K], добавлен 28.02.2011Разработка программы для нахождения минимального и максимального элемента массива, вычисления среднего арифметического строк и столбцов транспортирования матриц. Характеристика основных программных средств. Описание программы, руководство пользователя.
курсовая работа [2,4 M], добавлен 26.04.2015Процесс и порядок написания программы, реализующей графическое решение логической задачи (игры). Обзор аналогичных продуктов. Описание и алгоритм решения задачи. Структура программы, ее процедуры и функции. Настройка и руководство для пользователя.
курсовая работа [35,7 K], добавлен 29.06.2010Создание программы визуализации методов сортировки массива, особенности и направления ее практического применения. Выбор и обоснование среды программирования. Разработка руководства пользователя. Листинг программы и оценка эффективности ее использования.
дипломная работа [1,0 M], добавлен 15.06.2014