Автор работы: Пользователь скрыл имя, 08 Апреля 2011 в 21:25, курсовая работа
Актуальность проблемы информационной безопасности постоянно растет и стимулирует поиск новых методов защиты информации. Современные компьютерные технологии, прогресс в области глобальных компьютерных сетей и средств мультимедиа обеспечивает возможность разработки и реализации новых методов, предназначенных для обеспечения компьютерной информационной безопасности. Компьютерные технологии придали новый импульс развитию и совершенствованию нового направления в области защиты информации - компьютерной стеганографии.
Введение…………………………………………………………………………...3
Основная часть………………………………………………………….….6
1.Теоретическое обоснование……………………………………………..6
1.1 Основные положения стеганографии……………………….....6
1.2 Встраивание сообщений в незначащие элементы контейнера.14
1.3 Стеганографические протоколы……………………………....15
1.4 Практические вопросы встраивания данных………................17
1.5 Практические оценки стойкости стегосистем……………..…18
1.6 Скрытие данных в неподвижных изображениях……...……..19
1.6.1 Обзор алгоритмов встраивания информации в изображения………………………………………………………..20
II. Практическая часть……………………………………………………...23
1. Анализ технического задания………………………………………..23
Актуальность программного продукта………………………23
Назначение программного продукта……………………….....24
Принцип работы программного продукта………………..…..24
Сфера применения разработанного программного продукта.26
2.Обоснование выбора средств разработки……………………………..26
3.Модульная структура программы……………………………………..28
4.Разработка форм входных и выходных данных………………………29
4.1Входные данные……………………………………………...…29
4.2Выходные данные………………………………………………29
5.Теститрование программного продукта………………………………29
5.1Тестирование выполнения основных функций программы…….29
6.Разработка сопроводительных документов…………………………...30
6.1Описание руководства программиста………………………..…...30
6.2Описание руководства пользователя……………………………..30
ЗАКЛЮЧЕНИЕ……………………………………………………..…….32
СПИСОК ЛИТЕРАТУРЫ………………………………………………..34
Memo1.PasteFromClipboard;
end;
procedure TfrmStenograf.N30Click(Sender: TObject);
begin
Memo1.SelectAll;
end;
procedure TfrmStenograf.N32Click(Sender: TObject); //загрузка картинки
Var i, j: Word;
a: TColor;
r, g, b: byte;
begin
if OpenPictureDialog1.Execute then
with Image1 do begin
Visible:= False;
Picture.LoadFromFile(
if Picture.Bitmap.PixelFormat < pf16bit then
ShowMessage('Требуется большая глубина цвета')
else
for i:= 0 to Width-1 do
for j:= 0 to Height-1 do begin
a:= Canvas.Pixels[i, j];
r:= GetRValue(a);
if r = 255 then r:= 254;
g:= GetGValue(a);
if g = 255 then g:= 254;
b:= GetBValue(a);
if b = 255 then b:= 254;
Canvas.Pixels[i, j]:= RGB(r, g, b);
end;
Visible:= True;
Memo1.MaxLength:= Image1.Height-5;
end;
end;
procedure TfrmStenograf.N33Click(Sender: TObject);
begin
if SavePictureDialog1.Execute then
Image1.Picture.SaveToFile(
end;
procedure TfrmStenograf.N38Click(Sender: TObject); //вшить информацию в рисунок
Type TColoreArr= array[1..9] of byte;
Var i: Word;
r, g, b: Integer;
j: byte;
Str: String;
RedArr, GreenArr, BlueArr: TColoreArr;
a: TColor;
begin
X:= GetStart(Edit1.Text);
Y:= 2;
Str:= Memo1.Text;
if length(Str) > Image1.Height-5 then ShowMessage('Маленькая картинка') else begin
i:= 1;
with Image1.Canvas do begin
while length(Str) mod 3 <> 0 do Str:= Str + ' ';
Pixels[x, y]:= RGB(length(Str) div 65536, (length(Str) mod 65536) div 255, (length(Str) mod 65536) mod 255); //записали кол-во символов
repeat
X:= 2 + (106*X+1230) mod (Image1.Width-3); //генератор псевдослучайной последовательности
Y:= Y + 3; //через три
пикселя, для обеспечения
размытия
//размоем точки методотом луча
a:= Pixels[X-1, Y];
RedArr[1]:= GetRValue(a);
GreenArr[1]:= GetGValue(a);
BlueArr[1]:= GetBValue(a);
a:= Pixels[X-1, Y+1];
RedArr[2]:= GetRValue(a);
GreenArr[2]:= GetGValue(a);
BlueArr[2]:= GetBValue(a);
a:= Pixels[X, Y+1];
RedArr[3]:= GetRValue(a);
GreenArr[3]:= GetGValue(a);
BlueArr[3]:= GetBValue(a);
a:= Pixels[X+1, Y+1];
RedArr[4]:= GetRValue(a);
GreenArr[4]:= GetGValue(a);
BlueArr[4]:= GetBValue(a);
a:= Pixels[X+1, Y];
RedArr[5]:= GetRValue(a);
GreenArr[5]:= GetGValue(a);
BlueArr[5]:= GetBValue(a);
a:= Pixels[X+1, Y-1];
RedArr[6]:= GetRValue(a);
GreenArr[6]:= GetGValue(a);
BlueArr[6]:= GetBValue(a);
a:= Pixels[X, Y-1];
RedArr[7]:= GetRValue(a);
GreenArr[7]:= GetGValue(a);
BlueArr[7]:= GetBValue(a);
a:= Pixels[X-1, Y-1];
RedArr[8]:= GetRValue(a);
GreenArr[8]:= GetGValue(a);
BlueArr[8]:= GetBValue(a);
RedArr[9]:= ord(Str[i]);
GreenArr[9]:= ord(Str[i+1]);
BlueArr[9]:= ord(Str[i+2]);
r:= 0; //читаем информацию из соседних пикселей
g:= 0;
b:= 0;
for j:= 1 to 9 do begin
r:= (r + RedArr[j]);
g:= (g + GreenArr[j]);
b:= (b + BlueArr[j]);
end;
j:=1;
while r mod 9 <> 0 do begin//добавим соседние точки до кратности 9
Case j of
1: begin
RedArr[1]:= RedArr[1]+1;
Pixels[X-1, Y+1]:= RGB(RedArr[1], GreenArr[1], BlueArr[1]);
j:= j+1;
end;
2: begin
RedArr[2]:= RedArr[2]+1;
Pixels[X-1, Y]:= RGB(RedArr[2], GreenArr[2], BlueArr[2]);
j:= j+1;
end;
3: begin
RedArr[3]:= RedArr[3]+1;
Pixels[X, Y+1]:= RGB(RedArr[3], GreenArr[3], BlueArr[3]);
j:= j+1;
end;
4: begin
RedArr[4]:= RedArr[4]+1;
Pixels[X+1, Y+1]:= RGB(RedArr[4], GreenArr[4], BlueArr[4]);
j:= j+1;
end;
5: begin
RedArr[5]:= RedArr[5]+1;
Pixels[X+1, Y]:= RGB(RedArr[5], GreenArr[5], BlueArr[5]);
j:= j+1;
end;
6: begin
RedArr[6]:= RedArr[6]+1;
Pixels[X+1, Y-1]:= RGB(RedArr[6], GreenArr[6], BlueArr[6]);
j:= j+1;
end;
7: begin
RedArr[7]:= RedArr[7]+1;
Pixels[X, Y-1]:= RGB(RedArr[7], GreenArr[7], BlueArr[7]);
j:= j+1;
end;
8: begin
RedArr[8]:= RedArr[8]+1;
Pixels[X-1, Y-1]:= RGB(RedArr[8], GreenArr[8], BlueArr[8]);
j:= j+1;
end;
end;
r:= r+1;
end;
j:=1;
while g mod 9 <> 0 do begin
Case j of
1: begin
GreenArr[1]:= GreenArr[1]+1;
Pixels[X-1, Y+1]:= RGB(RedArr[1], GreenArr[1], BlueArr[1]);
j:= j+1;
end;
2: begin
GreenArr[2]:= GreenArr[2]+1;
Pixels[X-1, Y]:= RGB(RedArr[2], GreenArr[2], BlueArr[2]);
j:= j+1;
end;
3: begin
GreenArr[3]:= GreenArr[3]+1;
Pixels[X, Y+1]:= RGB(RedArr[3], GreenArr[3], BlueArr[3]);
j:= j+1;
end;
4: begin
GreenArr[4]:= GreenArr[4]+1;
Pixels[X+1, Y+1]:= RGB(RedArr[4], GreenArr[4], BlueArr[4]);
j:= j+1;
end;
5: begin
GreenArr[5]:= GreenArr[5]+1;
Pixels[X+1, Y]:= RGB(RedArr[5], GreenArr[5], BlueArr[5]);
j:= j+1;
end;
6: begin
GreenArr[6]:= GreenArr[6]+1;
Pixels[X+1, Y-1]:= RGB(RedArr[6], GreenArr[6], BlueArr[6]);
j:= j+1;
end;
7: begin
GreenArr[7]:= GreenArr[7]+1;
Pixels[X, Y-1]:= RGB(RedArr[7], GreenArr[7], BlueArr[7]);
j:= j+1;
end;
8: begin
GreenArr[8]:= GreenArr[8]+1;
Pixels[X-1, Y-1]:= RGB(RedArr[8], GreenArr[8], BlueArr[8]);
j:= j+1;
end;
end;
g:= g+1;
end;
j:=1;
while b mod 9 <> 0 do begin
Case j of
1: begin
BlueArr[1]:= BlueArr[1]+1;
Pixels[X-1, Y+1]:= RGB(RedArr[1], GreenArr[1], BlueArr[1]);
j:= j+1;
end;
2: begin
BlueArr[2]:= BlueArr[2]+1;
Pixels[X-1, Y]:= RGB(RedArr[2], GreenArr[2], BlueArr[2]);
j:= j+1;
end;
3: begin
BlueArr[3]:= BlueArr[3]+1;
Информация о работе Скрытие конфиденциальной информации при помощи стеганографии