Пояснительная записка к курсовой работе по дисциплине «Языки программирования»


Скачать 399.08 Kb.
Название Пояснительная записка к курсовой работе по дисциплине «Языки программирования»
страница 10/10
Тип Пояснительная записка
rykovodstvo.ru > Руководство эксплуатация > Пояснительная записка
1   2   3   4   5   6   7   8   9   10

//Выполняем хеширование пароля

hash:=Creepy.HashIt(Password.Text);

//Записываем зашифрованный файл вместе с хешем в контейнер

MS := TMemoryStream.Create;

Buf :=hash;

MS.Write(Buf, 33);

MS.Position := 0;

Stegano.WriteBufferToContainer(MS, 0, 33, 2, Container);

MS.Clear;

{Записываем нашу подпись для дальнейшей идентификации

наличия записанных данных в контейнере}

sign:='savvas';

MS.Write(sign,7);

MS.Position :=0;

Stegano.WriteBufferToContainer(MS, 33, 7, 2, Container);

MS.Clear;

BufI := 1;

Ms.Write(BufI, SizeOf(integer));

FS := TFileStream.Create(HD, fmOpenRead);

BufI := Length(ExtractFileName(HD))+1;

Buf := ExtractFileName(HD);

MS.Write(BufI, SizeOf(Integer));

MS.Write(Buf, BufI);

BufI := FS.Size;

MS.Write(BufI, SizeOf(Integer));

MS.CopyFrom(FS, FS.Size);

FS.Free;

MS1 := TMemoryStream.Create;

BufI := MS.Size;

MS1.Write(BufI, 4);

MS1.Position := 0;

MS.Position := 0;

Stegano.WriteBufferToContainer(MS1, 40, 4, 2, Container);

Stegano.WriteBufferToContainer(MS, 44, MS.Size, 2, Container);

If ModifiedContainerSave.Execute then

begin

Container.SaveToFile(ModifiedContainerSave.FileName);

end;

MS.Free;

MS1.Free;

deletefile(HD);//Удаляем зашифрованный файл

completed:=true;

PassLabel.Font.Color:=clNone;

end

else //

{Меняем цвет шрифта у надписи "Введите пароль:" на красный}

PassLabel.Font.Color:=clRed;

end;

end;

end;

end;
procedure TForm1.CoolEffectTimer;

begin

inc(t);

if kostil2=true then

//Для кнопки "Назад" - возвращаем главное меню

begin

if kostil=true then

begin

//Поднимаем кнопку "Извлечь" в исходное положение

if t<101 then

Extract.Top:=332-t

else

begin

//Отключаем таймер и обнуляем счетчик пикселей

CoolEffect.Enabled:=false;

t:=0;

kostil2:=false;

end

end

else

begin

//Поднимаем кнопку "Спрятать" в ее исходное положение

if t<45 then

HidePlz.Top:=332-t

else

begin

//Отключаем таймер и обнуляем счетчик пикселей

CoolEffect.Enabled:=false;

t:=0;

kostil2:=false;

end

end;

end

else

begin

if kostil=true then

begin

if t<101 then

Extract.Top:=232+t

else

begin

CoolEffect.Enabled:=False;//Выключаем таймер

t:=0; //Обнуляем счетчик пикселей

//Рисуем поле с вводом пароля и Label с надписью

//"Введите пароль:"

PassLabel.Visible:=true;

Password.Top:=264;

Password.Left:=184;

Password.Visible:=true;

//Заменяем кнопку "Выйти" на кнопку "Назад"

Back.Visible:=true;

kostil2:=true;

end

end

else

begin

if t<45 then

HidePlz.Top:=288+t

else

begin

CoolEffect.Enabled:=False;//Выключаем таймер

t:=0; //Обнуляем счетчик пикселей

//Рисуем поле с вводом пароля и Label с надписью

//"Введите пароль:"

PassLabel.Visible:=true;

Password.Top:=254;

Password.Left:=184;

Password.Visible:=true;

//Рисуем кнопку для открытия файла

SelectFile.Visible:=true;

//Заменяем кнопку "Выйти" на кнопку "Назад"

Quit.Visible:=false;

Back.Visible:=true;

kostil2:=true;

end;

end;

end;

end;
procedure TForm1.BackMouseLeave;

begin

{После того как курсор был убран,

возвращаем исходный цвет текста в кнопке "Назад"}

{$IFDEF Unix}

Back.Picture.LoadFromFile(path+'images/buttons/back.png');

{$ELSE}

Back.Picture.LoadFromFile(path+'images\buttons\back.png');

{$ENDIF}

end;
procedure TForm1.ExtractMouseLeave;

begin

{После того как курсор был убран,

возвращаем исходный цвет текста в кнопке "Извлечь}

{$IFDEF Unix}

Extract.Picture.LoadFromFile(path+'images/buttons/extractbtn.png');

{$ELSE}

Extract.Picture.LoadFromFile(path+'images\buttons\extractbtn.png');

{$ENDIF}

end;
procedure TForm1.FormCreate;

begin

DCFB:=FreeBytes.Caption;//сохраяем исходный caption

dcfsib:=FileSizeInBytes.Caption;//сохраяем исходный caption

MainMenu.Visible:=false;//прячем главное меню

Quit.Top:=200;

Form1.Height:=Form1.Height div 2;

//Скрываем кнопки "Извлечь" и "Спрятать" невидимыми

Extract.Visible:=false;

HidePlz.Visible:=false;

//Устанавливаем расположение папки с ресурсами

{$IFDEF Unix}

{В OS X Application.Location возвращает путь до самого исполняемого файла.

Поэтому меняем на путь до папки Resources}

path:=StringReplace(Application.Location, 'MacOS/', 'Resources/',[rfReplaceAll, rfIgnoreCase]);

{$ELSE}

path:=Application.Location;

{$ENDIF}

end;
procedure TForm1.HidePlzMouseEnter;

begin

{После того как курсор был наведен на кнопку "Спрятать",

изменяем цвет текста в кнопке на фиолетовый}

{$IFDEF Unix}

HidePlz.Picture.PNG.LoadFromFile(path+'images/buttons/hidebtn-active.png');

{$ELSE}

HidePlz.Picture.LoadFromFile(path+'images\buttons\hidebtn-active.png');

{$ENDIF}

// HidePlz.OnMouseEnter:=nil; деактивация евента

end;
procedure TForm1.HidePlzMouseLeave;

begin

{После того как курсор был убран,

возвращаем исходный цвет текста в кнопке "Спрятать"}

{$IFDEF Unix}

HidePlz.Picture.LoadFromFile(path+'images/buttons/hidebtn.png');

{$ELSE}

HidePlz.Picture.LoadFromFile(path+'images\buttons\hidebtn.png');

{$ENDIF}

end;
procedure TForm1.PicClick;

begin

//Процедура загрузки файла-контейнера

//Вызываем окно с выбором файла

if ContainerOpen.Execute then

begin

if ContainerChecker(ContainerOpen.Filename,1)=false

then

begin

showmessage('Изображение: '+ExtractFileName(ContainerOpen.Filename)+' не формата BitMap!');

exit;

end;

Container := TBitmap.Create;

Container.LoadFromFile(ContainerOpen.Filename);

//Проверяем , что изображение использует цветовую модель - RGB.

if Container.PixelFormat=pf1bit then

begin

showmessage('Алгоритм не поддерживает запись в BitMap изображение типа Grayscale');

exit;

end;

//Загружаем картинку в форму

pic.Picture.bitmap.loadfromfile(ContainerOpen.Filename);

picloaded:=true;//Устанавливаем флаг того, что файл-контейнер был успешно загружен

//Увеличиваем высоту формы и добавляем главное меню

Form1.Height:=485;

MainMenu.Visible:=true;//Прячем текстуру главного меню

Quit.Top:=384;//Сдвигаем кнопку "Выход"

Animation.Enabled:=false;//Отключаем таймер с анимацией

//Активируем кнопки, отвечающие за операции над контейнером

Extract.Visible:=true;

HidePlz.Visible:=true;

//Выводим сообщение с количеством свободных байт в контейнере

if ContainerChecker('',2)=true then

begin

Extract.Enabled:=true;

FreeBytes.Caption:='В контейнере уже записана информация. Вы можете ее извлечь или перезаписать.';

containerfull:=true;{пользователь может записать данные поверх}

end

else

begin

Extract.Enabled:=false;

containerfull:=false;

FreeBytes.Caption:=DCFB+' '+IntToStr((Container.Width * Container.Height * 2) div 8)+' Байт';

end;

FreeBytes.Visible:=true;

end;

end;
procedure TForm1.AnimationTimer;

begin

inc(t);

{$IFDEF Unix}

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;

{$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.</45></101></45></101>
1   2   3   4   5   6   7   8   9   10

Похожие:

Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Информационные системы и технологии»
Пояснительная записка содержит 25 страниц, 3 изображения, 3 источника, 2 приложения
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине: «Система складирования...
Усовершенствование методов управления логистическими процессами
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Производство и ремонт подвижного состава»
Федеральное государственное бюджетное образовательное учреждение высшего образования
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Электропитание...
Федеральное государственное бюджетное образовательное учреждение высшего образования
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Сертификация систем качества»
Колесные пары железнодорожных вагонов: их назначение, устройство, ремонт и алгоритм подтверждение соответствия 5
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине: «Система складирования...
Операции, направленные на координацию складской деятельности со службой закупки
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Менеджмент...
Стоимость основных производственных фондов ремонтного вагонного депо в плановом периоде, тыс руб
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Эксплуатация...
Организация технического обслуживания и ремонта оборудования железнодорожной электросвязи в региональном центре связи
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине: «Система складирования...
Рекомендации по совершенствованию организационных методов и внедрению более производительных технических средств реализации логистических...
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Эксплуатация...
Тема: «Организация технического обслуживания и ремонта оборудования железнодорожной электросвязи в региональном центре связи»
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Техническая документация к программному продукту «Информационная...
Программный продукт разработан в качестве курсовой работы по дисциплине «Технологии программирования»
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине: «Аудиотехника»...
Федеральное государственное образовательное учреждение высшего профессионального образования «Чувашский государственный университет...
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Передача дискретных...
Расчёт и организация сети передачи дискретных сообщений на участке железной дороги
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Вычислительные...
Организационная структура корпорации включает в себя административный аппарат (решает управленческие задачи) и производственный сектор...
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Диагностирование состояния деталей цилиндропоршневой группы двигателей...
Перечень ключевых слов, которые дают общее представление о содержании курсовой работы: субъективные и инструментальные методы диагностирования...
Пояснительная записка к курсовой работе по дисциплине «Языки программирования» icon Пояснительная записка к курсовой работе по дисциплине «Вычислительные...
В данной курсовойработе необходимо разработать структурированную кабельную сеть для организации, объединяющей несколько подразделений...

Руководство, инструкция по применению




При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск