Алгоритм шифрования DES, Triple DES

Понятие и значение информационной безопасности, принципы и методы ее обеспечения. Главные понятия и определения криптографии. Модели симметричного шифрования данных и их функциональные особенности. Криптосистема DES как одна из современных и популярных.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.06.2014
Размер файла 326,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

K:array [1.. 16,1..48] of integer;

Temp:array [0..7] of integer;

A:array [0..7] of integer;

A2:array [0.. 7,0..7] of integer;

i, j, m, n, p1, Counter, Val, v, x, q1, q2, f:integer;

Procedure PerevodBIN; // процедура переводит десятичные числа

var j, i:integer; // в двоичные

Begin

For j:=0 to 7 do

Begin P1:=2*Temp[j]; n:=0;

For i:=0 to 7 do

begin n:=n+2; p1:=p1 div 2;

If (Temp[j]/n)>=0.5 then A[i]:=p1 mod 2 else A[i]:=0; end;

For i:=0 to 7 do A2 [j, i]:=A [7-i]; end;

End;

Begin

For i:=1 to 8 do Temp [i-1]:=Ord (Text[i]);

PerevodBIN;

i:=-1;

For m:=0 to 7 do

For n:=0 to 7 do

Begin i:=i+1; UseTextBIN[i]:=A2 [m, n]; end;

For i:=0 to 63 do UseTextBIN2 [i+1]:=UseTextBIN[i];

Counter:=58; // перестановка IP

For i:=0 to 7 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

Counter:=60;

For i:=8 to 15 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

Counter:=62;

For i:=16 to 23 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

Counter:=64;

For i:=24 to 31 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

Counter:=57;

For i:=32 to 39 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

Counter:=59;

For i:=40 to 47 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

Counter:=61;

For i:=48 to 55 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

Counter:=63;

For i:=56 to 63 do

Begin UseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;

For i:=1 to 64 do UseTextIP[i]:=UseTextIPTemp [i-1];

For i:=3 to 10 do Temp [i-3]:=Ord (Key[i]);

PerevodBIN;

i:=-1;

For m:=0 to 7 do

For n:=0 to 7 do Begin i:=i+1; KeyBIN[i]:=A2 [m, n]; end;

for i:=0 to 63 do KeyBIN2 [i+1]:=KeyBIN[i]; // перестановка G

KeyG[1]:=KeyBin2 [57]; KeyG[2]:=KeyBin2 [49]; KeyG[3]:=KeyBin2 [41];

KeyG[4]:=KeyBin2 [33]; KeyG[5]:=KeyBin2 [25]; KeyG[6]:=KeyBin2 [17];

KeyG[7]:=KeyBin2 [9]; KeyG[8]:=KeyBin2 [1]; KeyG[9]:=KeyBin2 [58];

KeyG[10]:=KeyBin2 [50]; KeyG[11]:=KeyBin2 [42]; KeyG[12]:=KeyBin2 [34];

KeyG[13]:=KeyBin2 [26]; KeyG[14]:=KeyBin2 [18]; KeyG[15]:=KeyBin2 [10];

KeyG[16]:=KeyBin2 [2]; KeyG[17]:=KeyBin2 [59]; KeyG[18]:=KeyBin2 [51];

KeyG[19]:=KeyBin2 [43]; KeyG[20]:=KeyBin2 [35]; KeyG[21]:=KeyBin2 [27];

KeyG[22]:=KeyBin2 [19]; KeyG[23]:=KeyBin2 [11]; KeyG[24]:=KeyBin2 [3];

KeyG[25]:=KeyBin2 [60]; KeyG[26]:=KeyBin2 [52]; KeyG[27]:=KeyBin2 [44];

KeyG[28]:=KeyBin2 [36]; KeyG[29]:=KeyBin2 [63]; KeyG[30]:=KeyBin2 [55];

KeyG[31]:=KeyBin2 [47]; KeyG[32]:=KeyBin2 [39]; KeyG[33]:=KeyBin2 [31];

KeyG[34]:=KeyBin2 [23]; KeyG[35]:=KeyBin2 [15]; KeyG[36]:=KeyBin2 [7];

KeyG[37]:=KeyBin2 [62]; KeyG[38]:=KeyBin2 [54]; KeyG[39]:=KeyBin2 [46];

KeyG[40]:=KeyBin2 [38]; KeyG[41]:=KeyBin2 [30]; KeyG[42]:=KeyBin2 [22];

KeyG[43]:=KeyBin2 [14]; KeyG[44]:=KeyBin2 [6]; KeyG[45]:=KeyBin2 [61];

KeyG[46]:=KeyBin2 [53]; KeyG[47]:=KeyBin2 [45]; KeyG[48]:=KeyBin2 [37];

KeyG[49]:=KeyBin2 [29]; KeyG[50]:=KeyBin2 [21]; KeyG[51]:=KeyBin2 [13];

KeyG[52]:=KeyBin2 [5]; KeyG[53]:=KeyBin2 [28]; KeyG[54]:=KeyBin2 [20];

KeyG[55]:=KeyBin2 [12]; KeyG[56]:=KeyBin2 [4];

For i:=1 to 28 do begin C [0, i]:=KeyG[i]; D [0, i]:=KeyG [i+28]; end;

For i:=1 to 16 do // цикл для вычисления ключей и сохранения их в массив K

Begin

Case i of // цикл выполняющий сдвиг влево C и D

1,2,9,16:begin TempC:=C [i - 1,1]; TempD:=D [i - 1,1];

For m:=1 to 27 do

begin C [i, m]:=C [i-1, m+1]; D [i, m]:=D [i-1, m+1]; end;

C [i, 28]:=TempC; D [i, 28]:=TempD; end;

3,4,5,6,7,

8,10,11,12,

13,14,15:begin

TempC:=C [i - 1,1]; TempD:=D [i - 1,1]; TempC2:=C [i - 1,2]; TempD2:=D [i - 1,2];

For m:=1 to 26 do

begin C [i, m]:=C [i-1, m+2]; D [i, m]:=D [i-1, m+2]; end;

C [i, 27]:=TempC; D [i, 27]:=TempD; C [i, 28]:=TempC2; D [i, 28]:=TempD2; end;

end; {Case}

For j:=1 to 28 do KeyHTemp[j]:=C [i, j];

For j:=1 to 28 do KeyHTemp [j+28]:=D [i, j];

K [i, 1]:=KeyHtemp[14]; K [i, 2]:=KeyHtemp[17]; K [i, 3]:=KeyHtemp[11]; // перестановка H для определения используемых ключей

K [i, 4]:=KeyHtemp[24]; K [i, 5]:=KeyHtemp[1]; K [i, 6]:=KeyHtemp[5]; K [i, 7]:=KeyHtemp[3]; K [i, 8]:=KeyHtemp[28]; K [i, 9]:=KeyHtemp[15];

K [i, 10]:=KeyHtemp[6]; K [i, 11]:=KeyHtemp[21]; K [i, 12]:=KeyHtemp[10];

K [i, 13]:=KeyHtemp[23]; K [i, 14]:=KeyHtemp[19]; K [i, 15]:=KeyHtemp[12];

K [i, 16]:=KeyHtemp[4]; K [i, 17]:=KeyHtemp[26]; K [i, 18]:=KeyHtemp[8];

K [i, 19]:=KeyHtemp[16]; K [i, 20]:=KeyHtemp[7]; K [i, 21]:=KeyHtemp[27];

K [i, 22]:=KeyHtemp[20]; K [i, 23]:=KeyHtemp[13]; K [i, 24]:=KeyHtemp[2];

K [i, 25]:=KeyHtemp[41]; K [i, 26]:=KeyHtemp[52]; K [i, 27]:=KeyHtemp[31];

K [i, 28]:=KeyHtemp[37]; K [i, 29]:=KeyHtemp[47]; K [i, 30]:=KeyHtemp[55];

K [i, 31]:=KeyHtemp[30]; K [i, 32]:=KeyHtemp[40]; K [i, 33]:=KeyHtemp[51];

K [i, 34]:=KeyHtemp[45]; K [i, 35]:=KeyHtemp[33]; K [i, 36]:=KeyHtemp[48];

K [i, 37]:=KeyHtemp[44]; K [i, 38]:=KeyHtemp[49]; K [i, 39]:=KeyHtemp[39];

K [i, 40]:=KeyHtemp[56]; K [i, 41]:=KeyHtemp[34]; K [i, 42]:=KeyHtemp[53];

K [i, 43]:=KeyHtemp[46]; K [i, 44]:=KeyHtemp[42]; K [i, 45]:=KeyHtemp[50];

K [i, 46]:=KeyHtemp[36]; K [i, 47]:=KeyHtemp[29]; K [i, 48]:=KeyHtemp[32];

end;

For i:=1 to 32 do R [0, i]:=UseTextIP[i];

For i:=1 to 32 do L [0, i]:=UseTextIP [i+32];

For j:=1 to 16 do // цикл выполняющий шифрование восьми символов

// исходного текста после перестановки IP

Begin

RE[1]:=R [j - 1,32]; RE[2]:=R [j - 1,1]; RE[3]:=R [j - 1,2]; RE[4]:=R [j - 1,3]; // функция E

RE[5]:=R [j - 1,4]; RE[6]:=R [j - 1,5]; RE[7]:=R [j - 1,4]; RE[8]:=R [j - 1,5];

RE[9]:=R [j - 1,6]; RE[10]:=R [j - 1,7]; RE[11]:=R [j - 1,8]; RE[12]:=R [j - 1,9];

RE[13]:=R [j - 1,8]; RE[14]:=R [j - 1,9]; RE[15]:=R [j - 1,10]; RE[16]:=R [j - 1,11];

RE[17]:=R [j - 1,12]; RE[18]:=R [j - 1,13]; RE[19]:=R [j - 1,12]; RE[20]:=R [j - 1,13];

RE[21]:=R [j - 1,14]; RE[22]:=R [j - 1,15]; RE[23]:=R [j - 1,16]; RE[24]:=R [j - 1,17];

RE[25]:=R [j - 1,16]; RE[26]:=R [j - 1,17]; RE[27]:=R [j - 1,18]; RE[28]:=R [j - 1,19];

RE[29]:=R [j - 1,20]; RE[30]:=R [j - 1,21]; RE[31]:=R [j - 1,20]; RE[32]:=R [j - 1,21];

RE[33]:=R [j - 1,22]; RE[34]:=R [j - 1,23]; RE[35]:=R [j - 1,24]; RE[36]:=R [j - 1,25];

RE[37]:=R [j - 1,24]; RE[38]:=R [j - 1,25]; RE[39]:=R [j - 1,26]; RE[40]:=R [j - 1,27];

RE[41]:=R [j - 1,28]; RE[42]:=R [j - 1,29]; RE[43]:=R [j - 1,28]; RE[44]:=R [j - 1,29];

RE[45]:=R [j - 1,30]; RE[46]:=R [j - 1,31]; RE[47]:=R [j - 1,32]; RE[48]:=R [j - 1,1];

For i:=1 to 48 do REKey[i]:=(RE[i]+K [17-j, i]) mod 2; // сложение по модулю 2 Ri-1 и Ki

For i:=1 to 6 do B1 [i]:=REKey[i]; // преобразование 48-ми битной

For i:=1 to 6 do B2 [i]:=Rekey [i+6]; последовательности в 32-х битовую

For i:=1 to 6 do B3 [i]:=Rekey [i+12];

For i:=1 to 6 do B4 [i]:=Rekey [i+18];

For i:=1 to 6 do B5 [i]:=Rekey [i+24];

For i:=1 to 6 do B6 [i]:=Rekey [i+30];

For i:=1 to 6 do B7 [i]:=Rekey [i+36];

For i:=1 to 6 do B8 [i]:=Rekey [i+42];

m1:=B1 [1]*2+B1 [6]; n1:=B1 [2]*8+B1 [3]*4+B1 [4]*2+B1 [5];

m2:=B2 [1]*2+B2 [6]; n2:=B2 [2]*8+B2 [3]*4+B2 [4]*2+B2 [5];

m3:=B3 [1]*2+B3 [6]; n3:=B3 [2]*8+B3 [3]*4+B3 [4]*2+B3 [5];

m4:=B4 [1]*2+B4 [6]; n4:=B4 [2]*8+B4 [3]*4+B4 [4]*2+B4 [5];

m5:=B5 [1]*2+B5 [6]; n5:=B5 [2]*8+B5 [3]*4+B5 [4]*2+B5 [5];

m6:=B6 [1]*2+B6 [6]; n6:=B6 [2]*8+B6 [3]*4+B6 [4]*2+B6 [5];

m7:=B7 [1]*2+B7 [6]; n7:=B7 [2]*8+B7 [3]*4+B7 [4]*2+B7 [5];

m8:=B8 [1]*2+B8 [6]; n8:=B8 [2]*8+B8 [3]*4+B8 [4]*2+B8 [5];

RforP[1]:=S1 [m1, n1]; RforP[2]:=S2 [m2, n2]; RforP[3]:=S3 [m3, n3]; // преобразование S

RforP[4]:=S4 [m4, n4]; RforP[5]:=S5 [m5, n5]; RforP[6]:=S6 [m6, n6];

RforP[7]:=S7 [m7, n7]; RforP[8]:=S8 [m8, n8];

Counter:=0; // перевод десятичных значений S в двоичные

For Val:=1 to 8 do

begin n:=0; P1:=2*RforP[Val];

for i:=1 to 4 do

begin n:=n+2; P1:=P1 div 2;

If (RforP[Val]/n)>=0.5 Then PTemp [Val, i]:=P1 mod 2

else Ptemp [Val, i]:=0; end;

For i:=1 to 4 do

begin Counter:=Counter+1; P[Counter]:=Ptemp [Val, 5-i]; end;

end;

RW[1]:=P[16]; RW[2]:=P[7]; RW[3]:=P[20]; RW[4]:=P[21]; RW[5]:=P[29]; // значение функции F (Ri-1, Ki)

RW[6]:=P[12]; RW[7]:=P[28]; RW[8]:=P[17]; RW[9]:=P[1]; RW[10]:=P[15];

RW[11]:=P[23]; RW[12]:=P[26]; RW[13]:=P[5]; RW[14]:=P[18]; RW[15]:=P[31];

RW[16]:=P[10]; RW[17]:=P[2]; RW[18]:=P[8]; RW[19]:=P[24]; RW[20]:=P[14];

RW[21]:=P[32]; RW[22]:=P[27]; RW[23]:=P[3]; RW[24]:=P[9]; RW[25]:=P[19];

RW[26]:=P[13]; RW[27]:=P[30]; RW[28]:=P[6]; RW[29]:=P[22]; RW[30]:=P[11];

RW[31]:=P[4]; RW[32]:=P[25];

For i:=1 to 32 do L [j, i]:=R [j-1, i];

For i:=1 to 32 do R [j, i]:=(L [j-1, i]+RW[i]) mod 2; // сложение по модулю 2 Li-1 и F (Ri-1, Ki)

End;

End;

For i:=1 to 32 do IPTemp[i]:=R [16, i];

For i:=1 to 32 do IPTemp [i+32]:=L [16, i];

IP[1]:=IPTemp[40]; IP[2]:=IPTemp[8]; IP[3]:=IPTemp[48]; IP[4]:=IPTemp[16]; // конечная перестановка

IP[5]:=IPTemp[56]; IP[6]:=IPTemp[24]; IP[7]:=IPTemp[64]; IP[8]:=IPTemp[32];

IP[9]:=IPTemp[39]; IP[10]:=IPTemp[7]; IP[11]:=IPTemp[47]; IP[12]:=IPTemp[15];

IP[13]:=IPTemp[55]; IP[14]:=IPTemp[23]; IP[15]:=IPTemp[63]; IP[16]:=IPTemp[31];

IP[17]:=IPTemp[38]; IP[18]:=IPTemp[6]; IP[19]:=IPTemp[46]; IP[20]:=IPTemp[14];

IP[21]:=IPTemp[54]; IP[22]:=IPTemp[22]; IP[23]:=IPTemp[62]; IP[24]:=IPTemp[30];

IP[25]:=IPTemp[37]; IP[26]:=IPTemp[5]; IP[27]:=IPTemp[45]; IP[28]:=IPTemp[13];

IP[29]:=IPTemp[53]; IP[30]:=IPTemp[21]; IP[31]:=IPTemp[61]; IP[32]:=IPTemp[29];

IP[33]:=IPTemp[36]; IP[34]:=IPTemp[4]; IP[35]:=IPTemp[44]; IP[36]:=IPTemp[12];

IP[37]:=IPTemp[52]; IP[38]:=IPTemp[20]; IP[39]:=IPTemp[60]; IP[40]:=IPTemp[28];

IP[41]:=IPTemp[35]; IP[42]:=IPTemp[3]; IP[43]:=IPTemp[43]; IP[44]:=IPTemp[11];

IP[45]:=IPTemp[51]; IP[46]:=IPTemp[19]; IP[47]:=IPTemp[59]; IP[48]:=IPTemp[27];

IP[49]:=IPTemp[34]; IP[50]:=IPTemp[2]; IP[51]:=IPTemp[42]; IP[52]:=IPTemp[10];

IP[53]:=IPTemp[50]; IP[54]:=IPTemp[18]; IP[55]:=IPTemp[58]; IP[56]:=IPTemp[26];

IP[57]:=IPTemp[33]; IP[58]:=IPTemp[1]; IP[59]:=IPTemp[41]; IP[60]:=IPTemp[9];

IP[61]:=IPTemp[49]; IP[62]:=IPTemp[17]; IP[63]:=IPTemp[57]; IP[64]:=IPTemp[25];

W[1]:=IP[1]*128+IP[2]*64+IP[3]*32+IP[4]*16+IP[5]*8+IP[6]*4+IP[7]*2+IP[8];

W[2]:=IP[9]*128+IP[10]*64+IP[11]*32+IP[12]*16+IP[13]*8+IP[14]*4+IP[15]*2+IP[16];

W[3]:=IP[17]*128+IP[18]*64+IP[19]*32+IP[20]*16+IP[21]*8+IP[22]*4+IP[23]*2+IP[24];

W[4]:=IP[25]*128+IP[26]*64+IP[27]*32+IP[28]*16+IP[29]*8+IP[30]*4+IP[31]*2+IP[32];

W[5]:=IP[33]*128+IP[34]*64+IP[35]*32+IP[36]*16+IP[37]*8+IP[38]*4+IP[39]*2+IP[40];

W[6]:=IP[41]*128+IP[42]*64+IP[43]*32+IP[44]*16+IP[45]*8+IP[46]*4+IP[47]*2+IP[48];

W[7]:=IP[49]*128+IP[50]*64+IP[51]*32+IP[52]*16+IP[53]*8+IP[54]*4+IP[55]*2+IP[56];

W[8]:=IP[57]*128+IP[58]*64+IP[59]*32+IP[60]*16+IP[61]*8+IP[62]*4+IP[63]*2+IP[64];

For i:=1 to 8 do Finish[i]:=Chr (W[i]); // выходная последовательность

END;

BEGIN

S1 [0,0]:=14; S1 [0,1]:=4; S1 [0,2]:=13; S1 [0,3]:=1; S1 [0,4]:=2; S1 [0,5]:=15;

S1 [0,6]:=11; S1 [0,7]:=8; S1 [0,8]:=3; S1 [0,9]:=10; S1 [0,10]:=6; S1 [0,11]:=12;

S1 [0,12]:=5; S1 [0,13]:=9; S1 [0,14]:=0; S1 [0,15]:=7;

S1 [1,0]:=0; S1 [1,1]:=15; S1 [1,2]:=7; S1 [1,3]:=4; S1 [1,4]:=14; S1 [1,5]:=2;

S1 [1,6]:=13; S1 [1,7]:=1; S1 [1,8]:=10; S1 [1,9]:=6; S1 [1,10]:=12; S1 [1,11]:=11;

S1 [1,12]:=9; S1 [1,13]:=5; S1 [1,14]:=3; S1 [1,15]:=8;

S1 [2,0]:=4; S1 [2,1]:=1; S1 [2,2]:=14; S1 [2,3]:=8; S1 [2,4]:=13; S1 [2,5]:=6;

S1 [2,6]:=2; S1 [2,7]:=11; S1 [2,8]:=15; S1 [2,9]:=12; S1 [2,10]:=9;

S1 [2,11]:=7; S1 [2,12]:=3; S1 [2,13]:=10; S1 [2,14]:=5; S1 [2,15]:=0;

S1 [3,0]:=15; S1 [3,1]:=12; S1 [3,2]:=8; S1 [3,3]:=2; S1 [3,4]:=4; S1 [3,5]:=9;

S1 [3,6]:=1; S1 [3,7]:=7; S1 [3,8]:=5; S1 [3,9]:=11; S1 [3,10]:=3; S1 [3,11]:=14;

S1 [3,12]:=10; S1 [3,13]:=0; S1 [3,14]:=6; S1 [3,15]:=13;

S2 [0,0]:=15; S2 [0,1]:=1; S2 [0,2]:=8; S2 [0,3]:=14; S2 [0,4]:=6;

S2 [0,5]:=11; S2 [0,6]:=3; S2 [0,7]:=4; S2 [0,8]:=9; S2 [0,9]:=7; S2 [0,10]:=2;

S2 [0,11]:=13; S2 [0,12]:=12; S2 [0,13]:=0; S2 [0,14]:=5; S2 [0,15]:=10;

S2 [1,0]:=3; S2 [1,1]:=13; S2 [1,2]:=4; S2 [1,3]:=7; S2 [1,4]:=15; S2 [1,5]:=2;

S2 [1,6]:=8; S2 [1,7]:=14; S2 [1,8]:=12; S2 [1,9]:=0; S2 [1,10]:=1; S2 [1,11]:=10;

S2 [1,12]:=6; S2 [1,13]:=9; S2 [1,14]:=11; S2 [1,15]:=5;

S2 [2,0]:=0; S2 [2,1]:=14; S2 [2,2]:=7; S2 [2,3]:=11; S2 [2,4]:=10;

S2 [2,5]:=4; S2 [2,6]:=13; S2 [2,7]:=1; S2 [2,8]:=5; S2 [2,9]:=8; S2 [2,10]:=12;

S2 [2,11]:=6; S2 [2,12]:=9; S2 [2,13]:=3; S2 [2,14]:=2; S2 [2,15]:=15;

S2 [3,0]:=13; S2 [3,1]:=8; S2 [3,2]:=10; S2 [3,3]:=1; S2 [3,4]:=3; S2 [3,5]:=15;

S2 [3,6]:=4; S2 [3,7]:=2; S2 [3,8]:=11; S2 [3,9]:=6; S2 [3,10]:=7; S2 [3,11]:=12;

S2 [3,12]:=0; S2 [3,13]:=5; S2 [3,14]:=14; S2 [3,15]:=9;

S3 [0,0]:=10; S3 [0,1]:=0; S3 [0,2]:=9; S3 [0,3]:=14; S3 [0,4]:=6; S3 [0,5]:=3;

S3 [0,6]:=15; S3 [0,7]:=5; S3 [0,8]:=1; S3 [0,9]:=13; S3 [0,10]:=12; S3 [0,11]:=7;

S3 [0,12]:=11; S3 [0,13]:=4; S3 [0,14]:=2; S3 [0,15]:=8;

S3 [1,0]:=13; S3 [1,1]:=7; S3 [1,2]:=0; S3 [1,3]:=9; S3 [1,4]:=3; S3 [1,5]:=4;

S3 [1,6]:=6; S3 [1,7]:=10; S3 [1,8]:=2; S3 [1,9]:=8; S3 [1,10]:=5; S3 [1,11]:=14;

S3 [1,12]:=12; S3 [1,13]:=11; S3 [1,14]:=15; S3 [1,15]:=1;

S3 [2,0]:=13; S3 [2,1]:=6; S3 [2,2]:=4; S3 [2,3]:=9; S3 [2,4]:=8; S3 [2,5]:=15;

S3 [2,6]:=3; S3 [2,7]:=0; S3 [2,8]:=11; S3 [2,9]:=1; S3 [2,10]:=2; S3 [2,11]:=12;

S3 [2,12]:=5; S3 [2,13]:=10; S3 [2,14]:=14; S3 [2,15]:=7;

S3 [3,0]:=1; S3 [3,1]:=10; S3 [3,2]:=13; S3 [3,3]:=0; S3 [3,4]:=6; S3 [3,5]:=9;

S3 [3,6]:=8; S3 [3,7]:=7; S3 [3,8]:=4; S3 [3,9]:=15; S3 [3,10]:=14; S3 [3,11]:=3;

S3 [3,12]:=11; S3 [3,13]:=5; S3 [3,14]:=2; S3 [3,15]:=12;

S4 [0,0]:=7; S4 [0,1]:=13; S4 [0,2]:=14; S4 [0,3]:=3; S4 [0,4]:=0; S4 [0,5]:=6;

S4 [0,6]:=9; S4 [0,7]:=10; S4 [0,8]:=1; S4 [0,9]:=2; S4 [0,10]:=8; S4 [0,11]:=5;

S4 [0,12]:=11; S4 [0,13]:=12; S4 [0,14]:=4; S4 [0,15]:=15;

S4 [1,0]:=13; S4 [1,1]:=8; S4 [1,2]:=11; S4 [1,3]:=5; S4 [1,4]:=6; S4 [1,5]:=15;

S4 [1,6]:=0; S4 [1,7]:=3; S4 [1,8]:=4; S4 [1,9]:=7; S4 [1,10]:=2; S4 [1,11]:=12;

S4 [1,12]:=1; S4 [1,13]:=10; S4 [1,14]:=14; S4 [1,15]:=9;

S4 [2,0]:=10; S4 [2,1]:=6; S4 [2,2]:=9; S4 [2,3]:=0; S4 [2,4]:=12; S4 [2,5]:=11;

S4 [2,6]:=7; S4 [2,7]:=13; S4 [2,8]:=15; S4 [2,9]:=1; S4 [2,10]:=3; S4 [2,11]:=14;

S4 [2,12]:=5; S4 [2,13]:=2; S4 [2,14]:=8; S4 [2,15]:=4;

S4 [3,0]:=3; S4 [3,1]:=15; S4 [3,2]:=0; S4 [3,3]:=6; S4 [3,4]:=10; S4 [3,5]:=1;

S4 [3,6]:=13; S4 [3,7]:=8; S4 [3,8]:=9; S4 [3,9]:=4; S4 [3,10]:=5; S4 [3,11]:=11;

S4 [3,12]:=12; S4 [3,13]:=7; S4 [3,14]:=2; S4 [3,15]:=14;

S5 [0,0]:=2; S5 [0,1]:=12; S5 [0,2]:=4; S5 [0,3]:=1; S5 [0,4]:=7; S5 [0,5]:=10;

S5 [0,6]:=11; S5 [0,7]:=6; S5 [0,8]:=8; S5 [0,9]:=5; S5 [0,10]:=3; S5 [0,11]:=15;

S5 [0,12]:=13; S5 [0,13]:=0; S5 [0,14]:=14; S5 [0,15]:=9;

S5 [1,0]:=14; S5 [1,1]:=11; S5 [1,2]:=2; S5 [1,3]:=12; S5 [1,4]:=4; S5 [1,5]:=7;

S5 [1,6]:=13; S5 [1,7]:=1; S5 [1,8]:=5; S5 [1,9]:=0; S5 [1,10]:=15; S5 [1,11]:=10;

S5 [1,12]:=3; S5 [1,13]:=9; S5 [1,14]:=8; S5 [1,15]:=6;

S5 [2,0]:=4; S5 [2,1]:=2; S5 [2,2]:=1; S5 [2,3]:=11; S5 [2,4]:=10; S5 [2,5]:=13;

S5 [2,6]:=7; S5 [2,7]:=8; S5 [2,8]:=15; S5 [2,9]:=9; S5 [2,10]:=12; S5 [2,11]:=5;

S5 [2,12]:=6; S5 [2,13]:=3; S5 [2,14]:=0; S5 [2,15]:=14;

S5 [3,0]:=11; S5 [3,1]:=8; S5 [3,2]:=12; S5 [3,3]:=7; S5 [3,4]:=1; S5 [3,5]:=14;

S5 [3,6]:=2; S5 [3,7]:=13; S5 [3,8]:=6; S5 [3,9]:=15; S5 [3,10]:=0; S5 [3,11]:=9;

S5 [3,12]:=10; S5 [3,13]:=4; S5 [3,14]:=5; S5 [3,15]:=3;

S6 [0,0]:=12; S6 [0,1]:=1; S6 [0,2]:=10; S6 [0,3]:=15; S6 [0,4]:=9; S6 [0,5]:=2;

S6 [0,6]:=6; S6 [0,7]:=8; S6 [0,8]:=0; S6 [0,9]:=13; S6 [0,10]:=3; S6 [0,11]:=4;

S6 [0,12]:=14; S6 [0,13]:=7; S6 [0,14]:=5; S6 [0,15]:=11;

S6 [1,0]:=10; S6 [1,1]:=15; S6 [1,2]:=4; S6 [1,3]:=2; S6 [1,4]:=7; S6 [1,5]:=12;

S6 [1,6]:=9; S6 [1,7]:=5; S6 [1,8]:=6; S6 [1,9]:=1; S6 [1,10]:=13; S6 [1,11]:=14;

S6 [1,12]:=0; S6 [1,13]:=11; S6 [1,14]:=3; S6 [1,15]:=8;

S6 [2,0]:=9; S6 [2,1]:=14; S6 [2,2]:=15; S6 [2,3]:=5; S6 [2,4]:=2; S6 [2,5]:=8;

S6 [2,6]:=12; S6 [2,7]:=3; S6 [2,8]:=7; S6 [2,9]:=0; S6 [2,10]:=4; S6 [2,11]:=10;

S6 [2,12]:=1; S6 [2,13]:=13; S6 [2,14]:=11; S6 [2,15]:=6;

S6 [3,0]:=4; S6 [3,1]:=3; S6 [3,2]:=2; S6 [3,3]:=12; S6 [3,4]:=9; S6 [3,5]:=5;

S6 [3,6]:=15; S6 [3,7]:=10; S6 [3,8]:=11; S6 [3,9]:=14; S6 [3,10]:=1; S6 [3,11]:=7;

S6 [3,12]:=6; S6 [3,13]:=0; S6 [3,14]:=8; S6 [3,15]:=13;

S7 [0,0]:=4; S7 [0,1]:=11; S7 [0,2]:=2; S7 [0,3]:=14; S7 [0,4]:=15; S7 [0,5]:=0;

S7 [0,6]:=8; S7 [0,7]:=13; S7 [0,8]:=3; S7 [0,9]:=12; S7 [0,10]:=9; S7 [0,11]:=7;

S7 [0,12]:=5; S7 [0,13]:=10; S7 [0,14]:=6; S7 [0,15]:=1;

S7 [1,0]:=13; S7 [1,1]:=0; S7 [1,2]:=11; S7 [1,3]:=7; S7 [1,4]:=4; S7 [1,5]:=9;

S7 [1,6]:=1; S7 [1,7]:=10; S7 [1,8]:=14; S7 [1,9]:=3; S7 [1,10]:=5; S7 [1,11]:=12;

S7 [1,12]:=2; S7 [1,13]:=15; S7 [1,14]:=8; S7 [1,15]:=6;

S7 [2,0]:=1; S7 [2,1]:=4; S7 [2,2]:=11; S7 [2,3]:=13; S7 [2,4]:=12; S7 [2,5]:=3;

S7 [2,6]:=7; S7 [2,7]:=14; S7 [2,8]:=10; S7 [2,9]:=15; S7 [2,10]:=6; S7 [2,11]:=8;

S7 [2,12]:=0; S7 [2,13]:=5; S7 [2,14]:=9; S7 [2,15]:=2;

S7 [3,0]:=6; S7 [3,1]:=11; S7 [3,2]:=13; S7 [3,3]:=8; S7 [3,4]:=1; S7 [3,5]:=4;

S7 [3,6]:=10; S7 [3,7]:=7; S7 [3,8]:=9; S7 [3,9]:=5; S7 [3,10]:=0; S7 [3,11]:=15;

S7 [3,12]:=14; S7 [3,13]:=2; S7 [3,14]:=3; S7 [3,15]:=12;

S8 [0,0]:=13; S8 [0,1]:=2; S8 [0,2]:=8; S8 [0,3]:=4; S8 [0,4]:=6; S8 [0,5]:=15;

S8 [0,6]:=11; S8 [0,7]:=1; S8 [0,8]:=10; S8 [0,9]:=9; S8 [0,10]:=3; S8 [0,11]:=14;

S8 [0,12]:=5; S8 [0,13]:=0; S8 [0,14]:=12; S8 [0,15]:=7;

S8 [1,0]:=1; S8 [1,1]:=15; S8 [1,2]:=13; S8 [1,3]:=8; S8 [1,4]:=10; S8 [1,5]:=3;

S8 [1,6]:=7; S8 [1,7]:=4; S8 [1,8]:=12; S8 [1,9]:=5; S8 [1,10]:=6; S8 [1,11]:=11;

S8 [1,12]:=0; S8 [1,13]:=14; S8 [1,14]:=9; S8 [1,15]:=2;

S8 [2,0]:=7; S8 [2,1]:=11; S8 [2,2]:=4; S8 [2,3]:=1; S8 [2,4]:=9; S8 [2,5]:=12;

S8 [2,6]:=14; S8 [2,7]:=2; S8 [2,8]:=0; S8 [2,9]:=6; S8 [2,10]:=10; S8 [2,11]:=13;

S8 [2,12]:=15; S8 [2,13]:=3; S8 [2,14]:=5; S8 [2,15]:=8;

S8 [3,0]:=2; S8 [3,1]:=1; S8 [3,2]:=14; S8 [3,3]:=7; S8 [3,4]:=4; S8 [3,5]:=10;

S8 [3,6]:=8; S8 [3,7]:=13; S8 [3,8]:=15; S8 [3,9]:=12; S8 [3,10]:=9; S8 [3,11]:=0;

S8 [3,12]:=3; S8 [3,13]:=5; S8 [3,14]:=6; S8 [3,15]:=11;

ClrScr; // процедура очищающая экран (входит в стандартный модуль Crt)

Assign (Out, 'Result.txt');

rewrite(Out); Writeln;

Write ('Для того чтобы зашифровать / расшифровать файл нажмите 1'); Writeln;

Write (' Для того чтобы зашифровать / расшифровать сообщение нажмите 2'); Writeln;

Control:=ReadKey;

Case Control of

'1': Goto Cntr1;

'2': Goto Cntr2;

end;

Cntr1: Write ('Введите путь к файлу:'); Read(Way);

Assign (F, Way); Reset(F); Goto VVod;

Cntr2: Write ('Введите сообщение:'); Read(So);

assign (F, 'Temp.txt'); Rewrite(F); z:=Length(so);

For u:=1 to z do Write (f, So[u]); Close(f);

Reset(f); Goto VVod;

VVod: Write ('Введите ключ (8 символов):'); For u:=1 to 10 do read (Key[u]);

Write ('Для зашифрования нажмите 1'); Writeln;

Write (' Для расшифрования нажмите 2'); WriteLn;

Control2:=ReadKey;

Case Control2 of

'1': Goto StartC;

'2': Goto StartU;

end;

Label1: For u:=1 to 8 do // цикл, который разбивает входящие данные на блоки по восемь // символов, а затем выполняет их зашифрование, а также запись в файл.

begin A:=Finish[u]; Write (Out, A); end;

StartC:y:=1;

While not (Eof(F)) do

begin

For y:=1 to 8 do begin

read (F, s); Text[y]:=s; end;

Crypt; Goto Label1;

end;

For u:=y to 8 do Text[u]:=' ';

k2:=k2+2; If k2>1 then Goto all;

Label2: For u:=1 to 8 do // цикл, который разбивает входящие данные на блоки по восемь // символов, а затем выполняет их расшифрование, а также запись в файл.

begin A:=Finish[u]; Write (Out, A); end;

StartU: y:=1;

While not (Eof(F)) do

begin

For y:=1 to 8 do begin

read (F, s); Text[y]:=s; end;

UnCrypt; Goto Label2;

end;

For u:=y to 8 do Text[u]:=' ';

k2:=k2+2; If k2>1 then Goto all;

All:close(f); Close(Out);

If Control='2' then erase(f);

Writeln; Write ('Результат сохранен в файл Result.txt.'); Writeln;

END.

Размещено на Allbest.ru


Подобные документы

  • Появление шифров, история эволюции криптографии. Способ приложения знаний особенностей естественного текста для нужд шифрования. Критерии определения естественности. Способ построения алгоритмов симметричного шифрования. Криптосистема с открытым ключом.

    реферат [452,2 K], добавлен 31.05.2013

  • Особенности шифрования данных, предназначение шифрования. Понятие криптографии как науки, основные задачи. Анализ метода гаммирования, подстановки и метода перестановки. Симметрические методы шифрования с закрытым ключом: достоинства и недостатки.

    курсовая работа [564,3 K], добавлен 09.05.2012

  • История появления симметричных алгоритмов шифрования. Роль симметричного ключа в обеспечении степени секретности сообщения. Диффузия и конфузия как способы преобразования бит данных. Алгоритмы шифрования DES и IDEA, их основные достоинства и недостатки.

    лабораторная работа [335,9 K], добавлен 18.03.2013

  • Комбинированное использование симметричного и асимметричного шифрования. Зависимость между открытым и закрытым ключами. Основные недостатки симметричного шифрования. Схема двухстороннего конфиденциального обмена. Концепция шифрования по алгоритму DES.

    презентация [1,4 M], добавлен 20.12.2012

  • Симметричные криптосистемы как способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ. Разбор и реализация шифрования алгоритма: простая и двойная перестановка, перестановка "магический квадрат".

    курсовая работа [3,3 M], добавлен 11.03.2013

  • История алгоритмов симметричного шифрования (шифрования с закрытым ключом). Стандарты на криптографические алгоритмы. Датчики случайных чисел, создание ключей. Сфера интересов криптоанализа. Системы электронной подписи. Обратное преобразование информации.

    краткое изложение [26,3 K], добавлен 12.06.2013

  • Основные методы криптографической защиты информации. Система шифрования Цезаря числовым ключом. Алгоритмы двойных перестановок и магические квадраты. Схема шифрования Эль Гамаля. Метод одиночной перестановки по ключу. Криптосистема шифрования данных RSA.

    лабораторная работа [24,3 K], добавлен 20.02.2014

  • История возникновения алгоритма симметричного шифрования, условия и особенности его применения на современном этапе. Принципы и функции исследуемой технологии. Анализ главных преимуществ и недостатков использования алгоритма, оценка его уязвимости.

    курсовая работа [301,9 K], добавлен 29.10.2017

  • История криптографии. Сравнение алгоритмов шифрования, применение в операционной системе. Анализ продуктов в области пользовательского шифрования. Включение и отключение шифрования на эллиптических кривых. Использование хеш-функции. Электронная подпись.

    курсовая работа [492,6 K], добавлен 18.09.2016

  • Традиционные симметричные криптосистемы. Основные понятия и определения. Методы шифрования. Метод перестановок на основе маршрутов Гамильтона. Асимметричная криптосистема RSA. Расширенный алгоритм Евклида. Алгоритмы электронной цифровой подписи Гамаля.

    курсовая работа [235,6 K], добавлен 06.01.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.