Скачать 0.97 Mb.
|
ЗАКЛЮЧЕНИЕВ результате выполнения дипломного проектирования были решены следующие задачи: Описаны наиболее популярные методы встраивания информации в пространственную область изображения. Приведен их сравнительный анализ и выбран наиболее стойкий к пассивным атакам метод, который позволяет передавать большое количество информации. Разработан программный продукт на Delphi 7.0, для скрытой передачи информации в пространственной области изображения. СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
Приложение 1Листинг модуля “Main” программы на Delphi 7.0 {*************************************************************** } { Модуль Main } { Copyright (c) 2010 Сафиуллин Ф.Н. } { } { Разработчик: Сафиуллин Ф.Н. } { Модифицирован: 28 января 2010 г. } { } {*************************************************************** } unit Main; interface uses Windows, Classes, Messages, SysUtils, Variants, Graphics, Controls, Math,Forms, Dialogs, StdCtrls, ExtDlgs, ExtCtrls, Mask, ComCtrls, StrUtils,// модули Delphi StegoFunc; // модуль основных функция и процедур стеганографии type TForm1 = class(TForm) Button_OpenImg: TButton; Button_Write: TButton; Button_SaveImg: TButton; Button_Read: TButton; OpenPictureDialog_Img: TOpenPictureDialog; SaveDialog_Img: TSaveDialog; Image_Write: TImage; Image_Read: TImage; Memo_Txt: TMemo; Password: TEdit; Label_Img: TLabel; Label_Txt: TLabel; Label_Password: TLabel; Label3: TLabel; Label2: TLabel; Label4: TLabel; Label5: TLabel; Bevel1: TBevel; Bevel2: TBevel; CheckBox_Marker: TCheckBox; Label_Time: TLabel; ProgressBar: TProgressBar; Label6: TLabel; Edit_R: TEdit; Label7: TLabel; Label8: TLabel; Edit_G: TEdit; Label9: TLabel; Edit_B: TEdit; Label10: TLabel; procedure Button_OpenImgClick(Sender: TObject); procedure Button_WriteClick(Sender: TObject); procedure Button_SaveImgClick(Sender: TObject); procedure Button_ReadClick(Sender: TObject); procedure Memo_TxtChange(Sender: TObject); procedure CheckBox_MarkerClick(Sender: TObject); procedure Edit_KeyPress(Sender: TObject; var Key: Char); procedure Edit_Change(Sender: TObject); private { Private declarations } public InfoCont: Integer; // Переменная для хранения значения объема информации end; var Form1: TForm1; implementation {$R *.dfm} //************************************************************ // Процедура - обработчик нажатия кнопки "Открыть изображение" procedure TForm1.Button_OpenImgClick(Sender: TObject); var FileName : String; Pixels: Integer; begin If OpenPictureDialog_Img.Execute then begin // Открываем изображение для встраивания в него информации FileName := OpenPictureDialog_Img.FileName; // Выводим изображение на форму image_Write.Picture.Bitmap.Create; image_Write.Picture.Bitmap.LoadFromFile(FileName); image_Read.Picture := nil; // Вычислим количество пикселей в изображении Pixels := image_Write.Picture.Bitmap.Width * image_Write.Picture.Bitmap.Height; // Выводим информацию об объеме изображения Label_Img.Caption := 'Объем изображения: ' + IntToStr((Pixels * (StrToInt(Edit_R.Text) + StrToInt(Edit_G.Text) + StrToInt(Edit_B.Text))) div 8) + ' байт'; end else exit; end; //************************************************************ // Процедура - обработчик нажатия кнопки "Встроить информацию в изображение" procedure TForm1.Button_WriteClick(Sender: TObject); var StartTime : TDateTime; Indx, Indy, NewVal, i, j, ImgHeight, ImgWidth: Integer; B, G, R, B_byte, G_byte, R_byte, iMod, iDiv: byte; Mv, Mvb, Marker: String; KeyMatrix: TIntegerArray; IndMatrix: TStringArray; error, MarkerCheck: boolean; Bmp: TBitmap; List: String; begin // Изображение из формы в переменную Bmp Bmp := TBitmap.Create; Bmp.Assign(image_Write.Picture.Bitmap); // Читаем информацию с формы в переменную List List := Memo_Txt.Text; // Проверка заполнена ли текстовая информация if List = '' then begin MessageDlg('Не указана текстовая информация!', mtWarning, [mbOk] , 0); exit; end; // Проверка выбрано ли изображение if Bmp.Empty then begin MessageDlg('Не выбрано изображение!', mtWarning, [mbOk] , 0); exit; end; // Учитываем время начала встраивания StartTime := Time; Label_Time.Caption := 'Время встраивания: '; // Формирование последовательности бит встраиваемой информации for i:=1 to Length(List) do begin iDiv:=Ord(List[i]); for j:=1 to 8 do begin iMod := iDiv mod 2; iDiv := iDiv div 2; Mv := IntToStr(iMod) + Mv; end; Mvb := Mvb + Mv; Mv := ''; end; // Определяем переменные ProgressBar.Min := 1; ProgressBar.Max := Length(Mvb); MarkerCheck := CheckBox_Marker.Checked; Marker := ''; ImgHeight := bmp.Height; ImgWidth := bmp.Width; error := false; B_byte := 0; G_byte := 0; R_byte := 0; // Формирование основного ключа для вычисления координат x и y KeyMatrix := FormingKey(Password.Text,Marker); // Добавление маркера окончания, если он используется if MarkerCheck then Mvb := Mvb + Marker; // Производим встраивание информации for i:=1 to Length(Mvb) do begin // Отображение на форме состояние процесса ProgressBar.Position := i; // Проверим, нужно ли генерировать новую точку для встраивания if (i = 1) or ((B_byte = StrToInt(Edit_B.Text)) and (G_byte = StrToInt(Edit_G.Text)) and (R_byte = StrToInt(Edit_R.Text))) then begin // Определяем координаты X и Y для первой точки GenerateIndXIndY(IndX,IndY,ImgHeight,ImgWidth,KeyMatrix,IndMatrix,i,error); if error then exit; B_byte := 0; G_byte := 0; R_byte := 0; end; // Читаем цветовые значение RGB точки R := Byte(Bmp.Canvas.Pixels[(Indx-1), (Indy-1)] shr 0); G := Byte(Bmp.Canvas.Pixels[(Indx-1), (Indy-1)] shr 8); B := Byte(Bmp.Canvas.Pixels[(Indx-1), (Indy-1)] shr 16); // Встраиваем бит информации в цветовую область точки If B_byte < StrToInt(Edit_B.Text) then begin WriteLSB(B,8-B_byte,Mvb[i]); Inc(B_byte); end else If G_byte < StrToInt(Edit_G.Text) then begin WriteLSB(G,8-G_byte,Mvb[i]); Inc(G_byte); end else If R_byte < StrToInt(Edit_R.Text) then begin WriteLSB(R,8-R_byte,Mvb[i]); Inc(R_byte); end; // Формируем точку RGB NewVal := 0; NewVal := NewVal shl 8; NewVal := NewVal or B; NewVal := NewVal shl 8; NewVal := NewVal or G; NewVal := NewVal shl 8; NewVal := NewVal or R; // Записываем новые цветовые значения RGB в точку Bmp.Canvas.Pixels[(Indx-1), (Indy-1)] := NewVal; end; // Выводим итоговое изображение на форму image_Read.Picture.Bitmap := Bmp; Label_Time.Caption := 'Время встраивания: ' + TimeToStr(Time - StartTime); MessageDlg('Встраивание успешно завершено.', mtInformation, [mbOk] , 0); // Обнуление переменных List:= ''; Bmp.Free; end; //************************************************************ // Процедура - обработчик нажатия кнопки "Посмотреть встроенную информацию" procedure TForm1.Button_ReadClick(Sender: TObject); var Indx, Indy, i, j, ImgHeight, ImgWidth, Size: Integer; B, G, R, B_byte, G_byte , R_byte, Val: byte; List, Mv, Mvb, Marker: String; KeyMatrix: TIntegerArray; IndMatrix: TStringArray; error, MarkerCheck: boolean; Bmp: TBitmap; begin // Изображение из формы в переменную Bmp := image_Read.Picture.Bitmap; // Проверка выбрано ли изображение if Bmp.Empty then begin MessageDlg('Не выбрано изображение!', mtWarning, [mbOk] , 0); exit; end; // Определяем переменные MarkerCheck := CheckBox_Marker.Checked; Marker := ''; ImgHeight := bmp.Height; ImgWidth := bmp.Width; error := false; B_byte := 0; G_byte := 0; R_byte := 0; // Формирование основного ключа для вычисления координат x и y KeyMatrix := FormingKey(Password.Text,Marker); // Если используется маркер окончания информации if MarkerCheck then Size := ImgHeight * ImgWidth else Size := InfoCont*8; // Производим извлечение информации for i:=1 to Size do begin // Проверим, нужно ли генерировать новую точку для встраивания if (i = 1) or ((B_byte = StrToInt(Edit_B.Text)) and (G_byte = StrToInt(Edit_G.Text)) and (R_byte = StrToInt(Edit_R.Text))) then begin // Определяем координаты X и Y для первой точки GenerateIndXIndY(IndX,IndY,ImgHeight,ImgWidth,KeyMatrix,IndMatrix,i,error); if error then exit; B_byte := 0; G_byte:= 0; R_byte := 0; end; // Читаем цветовые значение RGB точки R := Byte(Bmp.Canvas.Pixels[(Indx-1), (Indy-1)] shr 0); G := Byte(Bmp.Canvas.Pixels[(Indx-1), (Indy-1)] shr 8); B := Byte(Bmp.Canvas.Pixels[(Indx-1), (Indy-1)] shr 16); // Читаем бит информации из цветовой области точки If B_byte < StrToInt(Edit_B.Text) then begin ReadLSB(B,8-B_byte,Mvb); Inc(B_byte); end else If G_byte < StrToInt(Edit_G.Text) then begin ReadLSB(G,8-G_byte,Mvb); Inc(G_byte); end else If R_byte < StrToInt(Edit_R.Text) then begin ReadLSB(R,8-R_byte,Mvb); Inc(R_byte); end; // Проверка метки, если найдена завершаем цикл if MarkerCheck and (AnsiRightStr(Mvb, 32) = Marker) then break; end; // Производим преобразование последовательности бит в сообщение List := ''; i := 1; // Если используется маркер окончания информации if MarkerCheck then Size := Length(Mvb)-32 else Size := Length(Mvb); while i <= Size do begin Mv := copy(Mvb,i,8); Val := 0; for j:=8 downto 1 do begin Val := Val + StrToInt(Mv[j])*Round(Power(2,8-j)); end; List := List + Chr(Val); i:=i+8; end; // Выводим сообщение на экран ShowMessage(List); end; //************************************************************ // Процедура - обработчик нажатия кнопки "Сохранить изображение" procedure TForm1.Button_SaveImgClick(Sender: TObject); var Bmp: TBitmap; begin // Изображение из формы в переменную Bmp := image_Read.Picture.Bitmap; // Проверка выбрано ли изображение if Bmp = nil then begin MessageDlg('Не выбрано изображение!', mtWarning, [mbOk] , 0); exit; end; // Открываем стандартную форму сохранения изображения If SaveDialog_Img.Execute then begin // Сохраняем изображение Caption := SaveDialog_Img.FileName; Bmp.SaveToFile(Caption); end else exit; end; //************************************************************ // Процедура - событие при изменении полея 'Memo_Txt' procedure TForm1.Memo_TxtChange(Sender: TObject); begin // Вычисляем объем информации if CheckBox_Marker.Checked then InfoCont := Length(Memo_Txt.Text) + 4 else InfoCont := Length(Memo_Txt.Text); Label_Txt.Caption := 'Объем информации: ' + IntToStr(InfoCont) + ' байт'; end; //************************************************************ // Процедура - событие при изменении поля 'CheckBox_Marker' procedure TForm1.CheckBox_MarkerClick(Sender: TObject); begin // Вычисляем объем информации if CheckBox_Marker.Checked then InfoCont := Length(Memo_Txt.Text) + 4 else InfoCont := Length(Memo_Txt.Text); Label_Txt.Caption := 'Объем информации: ' + IntToStr(InfoCont) + ' байт'; end; //************************************************************ // Процедура - событие при вводе количества бит в области procedure TForm1.Edit_KeyPress(Sender: TObject; var Key: Char); begin // Ограничение по вводу числа от 0 до 8 if Not (Key in ['0'..'8', #8])then Key:=#0; end; //************************************************************ // Процедура - событие при окончаниии вводе количества бит в области procedure TForm1.Edit_Change(Sender: TObject); var Pixels : Integer; begin // Если поля не заполнены им присваевается ноль if Edit_R.Text = '' then Edit_R.Text := '0'; if Edit_G.Text = '' then Edit_G.Text := '0'; if Edit_B.Text = '' then Edit_B.Text := '0'; // Вычислим количество пикселей в изображении Pixels := image_Write.Picture.Bitmap.Width * image_Write.Picture.Bitmap.Height; // Выводим информацию об объеме изображения Label_Img.Caption := 'Объем изображения: ' + IntToStr((Pixels * (StrToInt(Edit_R.Text) + StrToInt(Edit_G.Text) + StrToInt(Edit_B.Text))) div 8) + ' байт'; end; end. |
Дипломному проекту на тему: «Разработка методов встраивания информации... Санкт-Петербургский государственный электротехнический университет “лэти” им. В. И. Ульянова (Ленина)” (СПбгэту) |
Анализ стойкости метода коха-жао стеганографического встраивания... Аннотация: Рассмотрен метод стеганографического встраивания информации Коха-Жао. В статье проведен анализ стойкости данного метода... |
||
Пояснительная записка к дипломному проекту на тему индивидуальный жилой дом в г. Тюмени Исходные данные к проекту -задание на проектирование,рабочие чертежи марки ас,ГП. Материалы инженерно-геологических изысканий |
Пояснительная записка к дипломному проекту на тему: «Разработка автоматизированной... Тема дипломного проекта (работы) Разработка автоматизированной системы печати ценников на витрины автосалона на базе ms access |
||
Пояснительная записка к дипломному проекту на тему: «Разработка автоматизированной... Тема дипломного проекта (работы) Разработка автоматизированной системы инвентаризации комплектующих для сборки компьютеров на базе... |
Инструкция пользователя. 23 Разработка методов информационного поиска на основе методов интеллектуального анализа данных. 8 |
||
Пояснительная записка к дипломному проекту включает в себя: страниц... Тема дипломного проекта «Проект программно-методического комплекса автоматизации обработки данных и решения задач с использованием... |
Пояснительная записка к дипломному проекту включает в себя: 104108... Тема дипломного проекта «Проект программно-методического комплекса автоматизации обработки данных и решения задач с использованием... |
||
Реферат Пояснительная записка к дипломному проекту включает в себя:... Тема дипломного проекта «Проект программно-методического комплекса для оптимизации распределения заданий по формированию твердых... |
Пояснительная записка к курсовому проекту на тему микропроцессорная... |
Поиск на сайте Главная страница Литература Доклады Рефераты Курсовая работа Лекции |