3 1 procedura szyfrowania UCAZFFY35YXOLW5Y65NG77Z2EWO2GPIWQR46TGA


3.1 Procedura szyfrowania

Procedura szyfrowania pracuje w trzech trybach:

  1. Pierwszym trybem jest szyfrowanie z jednym kluczem dla każdego bloku szyfrogramu, polega ona na tym iż każdy wektor tekstu jawnego wraz z elementami nadmiarowymi szyfrowany jest za pomocą tego samego klucza. Schemat działania pokazano poniżej:

0x08 graphic

K - klucz, (M1,...,Mn) - kolejne bloki wiadomości, (C1,...,Cn) - kolejne bloki kryptogramu,

  1. Drugim trybem je szyfrowanie z kluczem losowym dla każdego bloku szyfrogramu, tryb polega na każdorazowym losowaniu klucza dla każdego bloku szyfrogramu. Klucz jest losowany na podstawie hasła użytkownika. Schemat działania pokazano poniżej:

0x08 graphic

0x08 graphic

(K1,...,Kn) - wygenerowane klucze , (M1,...,Mn) - kolejne bloki wiadomości, (C1,...,Cn) - kolejne bloki kryptogramu,

  1. Trzecim trybem jest sprzężenie bloków kryptogramu, polega na tym , że wszystkie kolejne bloki kryptogramu są ze sobą powiązane - każdy blok tekstu jawnego jest szyfrowany z poprzednim blokiem kryptogramu. Pierwszy blok tekstu jawnego jest natomiast szyfrowany z losowym wektorem inicjalizującym. Schemat działania pokazano poniżej:

0x08 graphic

K - klucz inicjujacy , (M1,...,Mn) - kolejne bloki wiadomości, (C1,...,Cn) - kolejne bloki kryptogramu,

Ogólny schemat działania procedury szyfrującej:

0x08 graphic

Procedura wykonująca szyfrowanie:

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

Przykład szyfrowania:

0x08 graphic
Wiadomość:

Wiadomość wraz z bajtami korekcji:

0x08 graphic

Permutacja:

0x08 graphic

Wiadomość po permutacji :

0x08 graphic

Klucz:

0x08 graphic

Blok kryptogramu:

0x08 graphic

M1

K

C1

C2

K

M2

Cn

K

Mn

K1

M1

...

C1

M2

K2

C2

Mn

Kn

Cn

...

M1

K

M2

C1

C2

Mn

Cn-1

Cn

...

C1

Cn-1

Odczyt danych z pliku wiadomości i obliczenie wektora z elementami nadmiarowymi

Odczyt hasła użytkownika

Wygenerowanie klucza początkowego i permutacji

Szyfrowanie bloków danych według wybranego trybu pracy

Zapis bloku szyfrogramu do pliku

Zakończenie szyfrowania

Koniec pliku = tak

Koniec pliku = nie

procedure Szyfruj_.Execute;

type

Plist = ^lista;

lista = record

bajt: byte;

end;

var

wekpom: TList;

tabpom: Plist;

i,j,q,pom,pom2,errpom:integer;

pom1,index: byte;

rozmiar:int64;

koniec,ziarno:longint;

bufor: array [1..255] of Byte;

bufzapis,per,perk: array [1..255] of Byte;

odp:boolean;

haslo:string;

begin

odp:=true;

if FileExists(Form1.Edit2.Text) then

if MessageDlg('Taki kryptogram istnieje. Czy chcesz go zapisać?',mtConfirmation, [mbYes, mbNo], 0) = mrNo then odp:=false;

{--------------------------------------------------------------------}

haslo:=Form1.MaskEdit2.Text;

ziarno:=0;

for i:=1 to SizeOf(haslo) do ziarno:=ziarno+Round(Ord(haslo[i])/i);

RandSeed:=ziarno;

for i:=1 to 255 do

begin

klucz[i]:=Random(255)+1;

end;

wekpom := TList.Create;

for i:=1 to 255 do

begin

New(tabpom);

tabpom^.bajt:=i;

wekpom.Add(tabpom);

end;

RandSeed:=ziarno;

for i:=1 to 255 do

begin

pom:=Random(wekpom.Count);

tabpom:=wekpom.Items[pom];

permut[i]:=tabpom^.bajt;

wekpom.Delete(pom);

end;

wekpom.Destroy;

{--------------------------------------------------------------------}

AssignFile(dane,ExtractFileDir(Application.ExeName)+'\mno.dat');

FileMode := 0;

Reset(dane);

SetLength(dane1,256);

for i:=0 to 255 do

begin

SetLength(dane1[i],256);

for j:=0 to 255 do

begin

BlockRead(dane,pom1,1);

dane1[i,j]:=pom1;

end;

end;

CloseFile(dane);

{-------------------------------------------------------------------}

if odp=true then

begin

Form1.Button1.Enabled:=False;

Form1.Button2.Enabled:=False;

Form1.Button4.Enabled:=False;

Form1.Button5.Enabled:=False;

Form1.Otwrz1.Enabled:=False;

Form1.Szyfruj1.Enabled:=False;

Form1.Edit1.Enabled:=False;

Form1.Edit2.Enabled:=False;

Form1.MaskEdit1.Enabled:=False;

Form1.MaskEdit2.Enabled:=False;

n:=255;

r:=130;

k:=125;

err:=65;

AssignFile(wiad,Form1.Edit1.Text);

Reset(wiad);

rozmiar:=FileSize(wiad);

Form1.Gauge1.MaxValue:=rozmiar;

koniec:=(rozmiar div k)*k;

AssignFile(krypto,Form1.Edit2.Text);

ReWrite(krypto);

RSgen(r);

{------------------------------------------------------------}

BlockWrite(krypto,rozmiar,SizeOf(rozmiar));

index:=Form1.RadioGroup1.ItemIndex;

BlockWrite(krypto,index,SizeOf(index));

RandSeed:=ziarno;

while (FilePos(wiad)<koniec) do

begin

BlockRead(wiad,bufor,k);

j:=1;

For i:=n-1 downto r do

begin

v[i]:=bufor[j];

inc(j);

end;

Encode(n,r);

for i:=1 to 255 do bufzapis[i]:=v[n-i];

{----------------------------------------------------------------}

case Form1.RadioGroup1.ItemIndex of

0:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

1:begin

for i:=1 to 255 do klucz[i]:=Random(255)+1;

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

2:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

for i:=1 to 255 do klucz[i]:=perk[i];

end;

end;

BlockWrite(krypto,perk,SizeOf(perk));

Form1.Gauge1.Progress:=FilePos(wiad);

end;

{--------------------------------------------------------------------}

if rozmiar>125 then

begin

for i:=1 to 255 do bufor[i]:=255;

BlockRead(wiad,bufor,(rozmiar-koniec));

j:=1;

for i:=n-1 downto 1 do

begin

v[i]:=bufor[j];

inc(j);

end;

Encode(n,r);

for i:=1 to 255 do bufzapis[i]:=v[n-i];

case Form1.RadioGroup1.ItemIndex of

0:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

1:begin

for i:=1 to 255 do klucz[i]:=Random(255)+1;

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

2:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

for i:=1 to 255 do klucz[i]:=perk[i];

end;

end;

BlockWrite(krypto,perk,SizeOf(perk));

Form1.Gauge1.Progress:=FilePos(wiad);

{------------------------------------------------------------}

CloseFile(wiad);

CloseFile(krypto);

end;

end;

Form1.Otwrz1.Enabled:=true;

Form1.Button4.Enabled:=True;

end;

end.

{--------------------------------------------------------------------}

AssignFile(dane,ExtractFileDir(Application.ExeName)+'\mno.dat');

FileMode := 0;

Reset(dane);

SetLength(dane1,256);

for i:=0 to 255 do

begin

SetLength(dane1[i],256);

for j:=0 to 255 do

begin

BlockRead(dane,pom1,1);

dane1[i,j]:=pom1;

end;

end;

CloseFile(dane);

{-------------------------------------------------------------------}

if odp=true then

begin

Form1.Button1.Enabled:=False;

Form1.Button2.Enabled:=False;

Form1.Button4.Enabled:=False;

Form1.Button5.Enabled:=False;

Form1.Otwrz1.Enabled:=False;

Form1.Szyfruj1.Enabled:=False;

Form1.Edit1.Enabled:=False;

Form1.Edit2.Enabled:=False;

Form1.MaskEdit1.Enabled:=False;

Form1.MaskEdit2.Enabled:=False;

n:=255;

r:=130;

k:=125;

err:=65;

AssignFile(wiad,Form1.Edit1.Text);

Reset(wiad);

rozmiar:=FileSize(wiad);

Form1.Gauge1.MaxValue:=rozmiar;

koniec:=(rozmiar div k)*k;

AssignFile(krypto,Form1.Edit2.Text);

ReWrite(krypto);

RSgen(r);

{------------------------------------------------------------}

BlockWrite(krypto,rozmiar,SizeOf(rozmiar));

index:=Form1.RadioGroup1.ItemIndex;

BlockWrite(krypto,index,SizeOf(index));

RandSeed:=ziarno;

while (FilePos(wiad)<koniec) do

BlockRead(wiad,bufor,k);

j:=1;

For i:=n-1 downto r do

begin

v[i]:=bufor[j];

inc(j);

end;

Encode(n,r);

for i:=1 to 255 do bufzapis[i]:=v[n-i];

{----------------------------------------------------------------}

case Form1.RadioGroup1.ItemIndex of

0:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

1:begin

for i:=1 to 255 do klucz[i]:=Random(255)+1;

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

2:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

for i:=1 to 255 do klucz[i]:=perk[i];

end;

end;

BlockWrite(krypto,perk,SizeOf(perk));

Form1.Gauge1.Progress:=FilePos(wiad);

end;

{--------------------------------------------------------------------}

if rozmiar>125 then

begin

for i:=1 to 255 do bufor[i]:=255;

BlockRead(wiad,bufor,(rozmiar-koniec));

j:=1;

for i:=n-1 downto 1 do

begin

v[i]:=bufor[j];

inc(j);

end;

Encode(n,r);

for i:=1 to 255 do bufzapis[i]:=v[n-i];

case Form1.RadioGroup1.ItemIndex of

0:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

1:begin

for i:=1 to 255 do klucz[i]:=Random(255)+1;

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

2:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

for i:=1 to 255 do klucz[i]:=perk[i];

end;

end;

BlockWrite(krypto,perk,SizeOf(perk));

Form1.Gauge1.Progress:=FilePos(wiad);

{------------------------------------------------------------}

CloseFile(wiad);

CloseFile(krypto);

end;

end;

Form1.Otwrz1.Enabled:=true;

Form1.Button4.Enabled:=True;

end;

end.

begin

BlockRead(wiad,bufor,k);

j:=1;

For i:=n-1 downto r do

begin

v[i]:=bufor[j];

inc(j);

end;

Encode(n,r);

for i:=1 to 255 do bufzapis[i]:=v[n-i];

{----------------------------------------------------------------}

case Form1.RadioGroup1.ItemIndex of

0:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

1:begin

for i:=1 to 255 do klucz[i]:=Random(255)+1;

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

2:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

for i:=1 to 255 do klucz[i]:=perk[i];

end;

end;

BlockWrite(krypto,perk,SizeOf(perk));

Form1.Gauge1.Progress:=FilePos(wiad);

end;

{--------------------------------------------------------------------}

if rozmiar>125 then

begin

for i:=1 to 255 do bufor[i]:=255;

BlockRead(wiad,bufor,(rozmiar-koniec));

j:=1;

for i:=n-1 downto 1 do

v[i]:=bufor[j];

inc(j);

end;

Encode(n,r);

for i:=1 to 255 do bufzapis[i]:=v[n-i];

case Form1.RadioGroup1.ItemIndex of

0:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

1:begin

for i:=1 to 255 do klucz[i]:=Random(255)+1;

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

2:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

for i:=1 to 255 do klucz[i]:=perk[i];

end;

end;

BlockWrite(krypto,perk,SizeOf(perk));

Form1.Gauge1.Progress:=FilePos(wiad);

{------------------------------------------------------------}

CloseFile(wiad);

CloseFile(krypto);

end;

end;

Form1.Otwrz1.Enabled:=true;

Form1.Button4.Enabled:=True;

end;

end.

begin

v[i]:=bufor[j];

inc(j);

end;

Encode(n,r);

for i:=1 to 255 do bufzapis[i]:=v[n-i];

case Form1.RadioGroup1.ItemIndex of

0:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

1:begin

for i:=1 to 255 do klucz[i]:=Random(255)+1;

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

end;

2:begin

for i:=1 to 255 do

begin

per[i]:=bufzapis[permut[i]];

perk[i]:=S(per[i],klucz[i]);

end;

for i:=1 to 255 do klucz[i]:=perk[i];

end;

end;

BlockWrite(krypto,perk,SizeOf(perk));

Form1.Gauge1.Progress:=FilePos(wiad);

{------------------------------------------------------------}

CloseFile(wiad);

CloseFile(krypto);

end;

end;

Form1.Otwrz1.Enabled:=true;

Form1.Button4.Enabled:=True;

end;

end.

{Metoda konstrukcji nadmiarowego symetrycznego szyfru blokowego korygującego manipulacje na kryptogramach. }


Wyszukiwarka

Podobne podstrony:
PROCEDURA OLUP
06 pamięć proceduralna schematy, skrypty, ramyid 6150 ppt
LAB PROCEDURY I FUNKCJE
proces nbsp pomocy nbsp, nbsp strategie nbsp i nbsp procedury nbsp SWPS[1][1] 4
Procedura systemowa Nadzór nad produktami niezgodnymi
procedura wypadek
procedura bada ewaluacyjnych - program zaj , procedura badań ewaluacyjnych
Niewydolność serca, Studia - ratownictwo medyczne, 3 rok, Zawansowane procedury ratunkowe
Grill - procedura postępowania
Procedury check in i check out oraz kompleksowa obsługa, powtórki do egzaminów
Procedury do redukcji zachowań niepożądanych wykorzystywane, terapia zajęciowa
nazwy w tabeli wyników, Studia - ratownictwo medyczne, 3 rok, Zawansowane procedury ratunkowe
Procedura Dopuszczenia Do Obrotu, STUDIA - Kierunek Transport, STOPIEŃ I, MATERIAŁY DODATKOWE
2. Typolgia nieprzystosowania społecznego, IPSIR, resocjalizacja w instytucjach zamknietych, statyst
harmon wspolpr, Awans zawodowy, Procedury i pomoc
mpdm procedury, Akademia morska Szczecin, IV semestr, BN
proced.wyp.ucz.2, BHP 2014
Ciało obce w drogach oddechowych-dorośli, Studia - ratownictwo medyczne, 3 rok, Zawansowane procedur

więcej podobnych podstron