Смекни!
smekni.com

Скрытие конфиденциальной информации при помощи стеганографии (стр. 7 из 7)

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;

Pixels[X, Y+1]:= RGB(RedArr[3], GreenArr[3], BlueArr[3]);

j:= j+1;

end;

4: begin

BlueArr[4]:= BlueArr[4]+1;

Pixels[X+1, Y+1]:= RGB(RedArr[4], GreenArr[4], BlueArr[4]);

j:= j+1;

end;

5: begin

BlueArr[5]:= BlueArr[5]+1;

Pixels[X+1, Y]:= RGB(RedArr[5], GreenArr[5], BlueArr[5]);

j:= j+1;

end;

6: begin

BlueArr[6]:= BlueArr[6]+1;

Pixels[X+1, Y-1]:= RGB(RedArr[6], GreenArr[6], BlueArr[6]);

j:= j+1;

end;

7: begin

BlueArr[7]:= BlueArr[7]+1;

Pixels[X, Y-1]:= RGB(RedArr[7], GreenArr[7], BlueArr[7]);

j:= j+1;

end;

8: begin

BlueArr[8]:= BlueArr[8]+1;

Pixels[X-1, Y-1]:= RGB(RedArr[8], GreenArr[8], BlueArr[8]);

j:= j+1;

end;

end;

b:= b+1;

end;

r:= r div 9;

g:= g div 9;

b:= b div 9;

//закончили размытие точки

Image1.Canvas.Pixels[x, y]:= RGB(r, g, b); //в каждый пиксель помещаем три символа текста

i:= i+3;

Until i = length(Str)+1;

end;

end;

Image1.Repaint;

end;

procedure TfrmStenograf.N39Click(Sender: TObject); //вытащить информацию из рисунка

Type TColoreArr= array[1..8] of byte;

Var a: TColor;

RedArr, GreenArr, BlueArr: TColoreArr;

r, g, b: Integer;

j: byte;

i: LongWord;

Str: String;

begin

X:= GetStart(Edit1.Text);

Y:= 2;

Str:= '';

a:= Image1.Canvas.Pixels[X, Y];

i:= GetRValue(a)*65536 + GetGValue(a)*255 + GetBValue(a); //считываем длину текста

repeat

X:= 2 + (106*X+1230) mod (Image1.Width-3); //генератор псевдослучайной последовательности

Y:= Y + 3;

with Image1.Canvas do begin

// устраним размытие точки

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);

r:= 0; //читаем информацию из соседних пикселей

g:= 0;

b:= 0;

for j:= 1 to 8 do begin

r:= (r + RedArr[j]);

g:= (g + GreenArr[j]);

b:= (b + BlueArr[j]);

end;

end;

//устранили размытость

a:= Image1.Canvas.Pixels[X, Y]; //читаем информацию из пикселя

r:= 9*GetRValue(a) - r;

g:= 9*GetGValue(a) - g;

b:= 9*GetBValue(a) - b;

Str:= Str + chr(r);

Str:= Str + chr(g);

Str:= Str + chr(b);

i:= i-3;

Until i = 0;

Memo1.Text:= Str;

end;

procedure TfrmStenograf.N1Click(Sender: TObject);

begin

N20.Click;

end;

procedure TfrmStenograf.N2Click(Sender: TObject);

begin

N21.Click;

end;

procedure TfrmStenograf.N6Click(Sender: TObject);

begin

N25.Click;

end;

procedure TfrmStenograf.N7Click(Sender: TObject);

begin

N26.Click;

end;

procedure TfrmStenograf.N8Click(Sender: TObject);

begin

N27.Click;

end;

procedure TfrmStenograf.N11Click(Sender: TObject);

begin

N30.Click;

end;

procedure TfrmStenograf.N12Click(Sender: TObject);

begin

N32.Click;

end;

procedure TfrmStenograf.N13Click(Sender: TObject);

begin

N33.Click;

end;

procedure TfrmStenograf.N15Click(Sender: TObject);

begin

N38.Click;

end;

procedure TfrmStenograf.N16Click(Sender: TObject);

begin

N39.Click;

end;

procedure TfrmStenograf.Timer1Timer(Sender: TObject);

begin

StatusBar1.Panels[0].Text:= 'Символов набрано: ' + IntToStr(length(Memo1.Text));

StatusBar1.Panels[1].Text:= 'Символов максимум: ' + IntToStr(Memo1.MaxLength);

StatusBar1.Panels[2].Text:= 'Рабочий файл: ' + OpenPictureDialog1.FileName;

end;

end.

ПРИОЖЕНИЕ Б

Рисунок 1. – форма 1 «Стегонаграфия»

Рисунок 2. - форма 1 «Стегонаграфия»