Автор работы: Пользователь скрыл имя, 14 Апреля 2013 в 13:17, курсовая работа
Криптография – бұл ақпаратты қорғау ғылымы. Қорғау шифрлеу арқылы жетеді,яғни арнайы кілттік ақпаратты білмей қорғалған кіріс деректерінің қиын ашылуын жасйды. Кілт жасырын сақталынатын және дәл осы уақытта мүмкін болатын шифрленуді анықтайтын, криптожүйенің оңай ауыстырылатын бір бөлігі деп түсіндіріледі.
Шифрлеу методы кем дегенде екі қасиеттерге болу үшін:
Заңды алушы кері айналымды орындау және хатты шифрді аша алады;
Хатты тартып алған қарсыластың криптоаналитигі
Кіріспе........................................................................................................................3
Алгоритм және оның қасиеттері:
а) Алгоритм DES.............................................................................................4
б) Алгоритм New DES...................................................................................6
Криптографиялық алгоритмдердің баға критерілері.............................................7
Блоктік шифр алгоритмінің бағалануының жылдамдығы..................................10
Қолданушы интерфейс түсініктемесі...................................................................12
Программа листингі...............................................................................................13
Қорытынды..............................................................................................................25
Пайдаланылған әдебиеттер тізімі..........................................................................26
((07,13,14,03,00,06,09,10,01,
(13,08,11,05,06,15,00,03,04,
(10,06,09,00,12,11,07,13,15,
(13,15,00,06,10,01,13,08,09,
((02,12,04,01,07,10,11,06,08,
(14,11,02,12,04,07,13,01,05,
(04,02,01,11,10,13,07,08,15,
(11,08,12,07,01,14,02,13,06,
((12,01,10,15,09,02,06,08,00,
(10,15,04,02,07,12,09,05,06,
(09,14,15,05,02,08,12,03,07,
(04,03,02,12,09,05,15,10,11,
((04,11,02,14,15,00,08,13,03,
(13,00,11,07,04,09,01,10,14,
(01,04,11,13,12,03,07,14,10,
(06,11,13,08,01,04,10,07,09,
((13,02,08,04,06,15,11,01,10,
(01,15,13,08,10,03,07,04,12,
(07,11,04,01,09,12,14,02,00,
(02,01,14,07,04,10,08,13,15,
);
DES_P:Array[0..31] Of Byte = (16,7,20,21,
29,12,28,17,
1,15,23,26,
5,18,31,10,
2,8,24,14,
32,27,3,9,
19,13,30,6,
22,11,4,25);
DES_REVERSE_IP:Array[0..63] Of Byte = (40,8,48,16,56,24,64,32,
39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,
37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,
35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58,26,
33,1,41,9,49,17,57,25);
DES_LSH:Array[0..15] Of Byte = (1,1,2,2,2,2,2,2,1,2,2,2,2,2,
Function BinToInt(S:TBitString):
Function IntToBin(N:Integer;Precision:
Function BinToStr(Bits:TBitString):
Function StrToBin(S:String):TBitString;
Function AnsiStrToBin(S:String; Zeroes:Boolean=True):
Function BinToAnsiStr(Bits:TBitString):
Procedure CopyBits(Var Dest:TBitString; Source:TBitString; NBits:Integer);
Function ConcatBits(Bits:Array Of TBitString):TBitString;
Function DESEncode(S,Key:String):
Function DESDecode(S,Key:String):
Function GetPermutedKey(Key:TBitString)
Function GetPermutedKey2(Key:
Function GetSplitKey(Key:TBitString):
Function GetConcatKey(Key:TSplitKey):
Function GetIPKey(M:TBitString; ConcatKey:TConcatKey):TIPKey;
Function GetF(R,K:TBitString):
Function GetSBox(Index:Integer; T:TBitString):TBitString;
Function GetReverseIP(RL:TBitString):
Procedure ReverseSubKeys(Var Keys:TConcatKey);
implementation
Function ConcatBits(Bits:Array Of TBitString):TBitString;
Var
I,C:Integer;
Begin
SetLength(Result,0);
For C:=0 To Length(Bits)-1 Do
Begin
SetLength(Result,Length(Result
For I:=0 To Length(Bits[C])-1 Do
Result[Length(Result)-Length(
End;
End;
Procedure CopyBits(Var Dest:TBitString; Source:TBitString; NBits:Integer);
Var
I:Integer;
Begin
SetLength(Dest,NBits);
For I:=0 To NBits-1 Do
Dest[I]:=Source[I];
End;
Function BinToInt(S: TBitString): Integer;
Var
L,I:Integer;
Begin
Result:=0;
L:=Length(S);
IF L=0 Then
Raise EConvertError.Create('
For I:=L-1 DownTo 0 Do
Result:=Result+Ord(S[I])*
End;
Function IntToBin(N:Integer; Precision:Integer):TBitString;
Var
BitList:TList;
Bit:PBoolean;
Begin
SetLength(Result,0);
BitList:=TList.Create;
While N>0 Do
Begin
New(Bit);
Bit^:=Boolean(N mod 2);
BitList.Insert(0,Bit);
N:=N div 2;
End;
While BitList.Count<Precision Do
Begin
New(Bit);
Bit^:=False;
BitList.Insert(0,Bit);
End;
For N:=0 To BitList.Count-1 Do
Begin
SetLength(Result,N+1);
Bit:=BitList.Items[N];
Result[N]:=Bit^;
Dispose(Bit);
End;
BitList.Free;
end;
Function AnsiStrToBin(S: String; Zeroes:Boolean):TBitString;
Var
Temp,B:TBitString;
L,I,J:Integer;
Begin
L:=0;
SetLength(Result,L);
SetLength(Temp,L);
SetLength(B,0);
For I:=1 To Length(S) Do
Begin
B:=IntToBin(Ord(S[I]));
L:=L+Length(B);
SetLength(Temp,L);
For J:=0 To Length(B)-1 Do
Temp[Length(Temp)-Length(B)+J]
End;
Result:=Temp;
End;
Function BinToStr(Bits:TBitString):
Var
I,L:Integer;
Begin
Result:='';
L:=Length(Bits);
IF L=0 Then
Raise EConvertError.Create('
For I:=0 To L-1 Do
IF Bits[I] Then Result:=Result+'1'
Else Result:=Result+'0';
End;
Function StrToBin(S:String):TBitString;
Var
I:Integer;
Begin
SetLength(Result,0);
For I:=1 To Length(S) Do
Begin
IF (S[I]<>'1')And(S[I]<>'0') Then
Raise EConvertError.Create(S+' is invalid binary string');
SetLength(Result,I);
Result[I-1]:=Boolean(StrToInt(
End;
End;
Function BinToAnsiStr(Bits:TBitString):
Var
I:Integer;
B:TBitString;
Begin
Result:='';
SetLength(B,8);
I:=0;
While I<=Length(Bits)-8 Do
Begin
CopyMemory(B,Ptr(Integer(Bits)
Result:=Result+Char(BinToInt(
Inc(I,8);
End;
End;
Function GetPermutedKey(Key:TBitString)
Var
I:Integer;
Begin
SetLength(Result,Length(DES_
For I:=0 To Length(DES_PC1)-1 Do
Result[I]:=Key[DES_PC1[I]-1];
End;
Function GetPermutedKey2(Key:
Var
I:Integer;
Begin
SetLength(Result,Length(DES_
For I:=0 To Length(DES_PC2)-1 Do
Result[I]:=Key[DES_PC2[I]-1];
End;
Function GetSplitKey(Key:TBitString):
Function LeftShift(Key:TBitString; N:Integer):TBitString;
Var
I,J:Integer;
Temp:TBitString;
Begin
SetLength(Result,28);
SetLength(Temp,28);
For I:=0 To 27 Do
Temp[I]:=Key[I];
For J:=1 To N Do
Begin
For I:=1 To 27 Do
Result[I-1]:=Temp[I];
Result[27]:=Temp[0];
For I:=0 To 27 Do
Temp[I]:=Result[I];
End;
End;
Var
I,J:Integer;
Begin
For J:=1 To 16 Do
Begin
SetLength(Result[J].C,28);
SetLength(Result[J].D,28);
End;
CopyBits(Result[0].C,Key,28);
CopyBits(Result[0].D,
For I:=1 To 16 Do
Begin
Result[I].C:=LeftShift(Result[
Result[I].D:=LeftShift(Result[
End;
End;
Function GetConcatKey(Key:TSplitKey):
Var
I:Integer;
Temp:TBitString;
Begin
For I:=0 To 15 Do
Begin
SetLength(Result[I],56);
Temp:=ConcatBits([Key[I+1].C,
Result[I]:=GetPermutedKey2(
End;
End;
Function GetIPKey(M:TBitString; ConcatKey:TConcatKey):TIPKey;
Var
I,J:Integer;
IP, F:TBitString;
Begin
For I:=0 To 16 Do
Begin
SetLength(Result[I].L,32);
SetLength(Result[I].R,32);
End;
SetLength(IP,64);
For I:=0 To Length(DES_IP)-1 Do
IP[I]:=M[DES_IP[I]-1];
For I:=0 To 31 Do
Result[0].L[I]:=IP[I];
For I:=32 To 63 Do
Result[0].R[I-32]:=IP[I];
For I:=1 To 16 Do
Begin
Result[I].L:=Result[I-1].R;
F:=GetF(Result[I-1].R,
For J:=0 To 31 Do
Result[I].R[J]:=Result[I-1].L[
End;
End;
Function GetF(R,K:TBitString):
Var
I,J:Integer;
S,E,KE,F,T:TBitString;
Begin
SetLength(E,48);
For I:=0 To 47 Do
E[I]:=R[DES_E[I]-1];
SetLength(KE,48);
For I:=0 To 47 Do
KE[I]:=K[I] XOR E[I];
SetLength(T,6);
SetLength(F,0);
SetLength(S,4);
I:=0;
While I<48 Do
Begin
For J:=0 To 6 Do
T[J]:=KE[J+I];
S:=GetSBox(I div 6,T);
F:=ConcatBits([F,S]);
I:=I+6;
End;
SetLength(Result,32);
For I:=0 To 31 Do
Result[I]:=F[DES_P[I]-1];
End;
Function GetSBox(Index:Integer; T:TBitString):TBitString;
Var
Val,Row,Col:Integer;
Temp:TBitString;
Begin
SetLength(Result,4);
SetLength(Temp,2);
Temp[0]:=T[0];
Temp[1]:=T[5];
Row:=BinToInt(Temp);
SetLength(Temp,4);
CopyBits(Temp,TBitString(@T[1]
Col:=BinToInt(Temp);
Val:=S_BOXES[Index,Row,Col];
SetLength(Result,4);
Result:=IntToBin(Val,4);
End;
Function GetReverseIP(RL:TBitString):
Var
I:Integer;
Begin
SetLength(Result,64);
For I:=0 To Length(DES_REVERSE_IP)-1 Do
Result[I]:=RL[DES_REVERSE_IP[
End;
Procedure ReverseSubKeys(Var Keys:TConcatKey);
Var
I,L:Integer;
T:TBitString;
Begin
SetLength(T,48);
L:=Length(Keys);
For I:=0 To (L-1)Div 2 Do
Begin
T:=Keys[I];
Keys[I]:=Keys[(L-I)-1];
Keys[(L-I)-1]:=T;
End;
End;
Function DESEncode(S,Key:String):
Var
I:Integer;
K:TBitString;
M:TBitString;
RL:TBitString;
Kplus:TBitString;
SplitKey:TSplitKey;
ConcatKey:TConcatKey;
IPKey:TIPKey;
Begin
K:=AnsiStrToBin(Key);
Kplus:=GetPermutedKey(K);
SplitKey:=GetSplitKey(Kplus);
ConcatKey:=GetConcatKey(
M:=AnsiStrToBin(S);
IPKey:=GetIPKey(M,ConcatKey);
SetLength(RL,64);
For I:=0 To 31 Do
Begin
RL[I]:=IPKey[16].R[I];
RL[I+32]:=IPKey[16].L[I];
End;
RL:=GetReverseIP(RL);
Result:=RL;
End;
Function DESDecode(S,Key:String):
Var
I:Integer;
K:TBitString;
M:TBitString;
RL:TBitString;
Kplus:TBitString;
SplitKey:TSplitKey;
ConcatKey:TConcatKey;
IPKey:TIPKey;
Begin
K:=AnsiStrToBin(Key);
Kplus:=GetPermutedKey(K);
SplitKey:=GetSplitKey(Kplus);
ConcatKey:=GetConcatKey(
ReverseSubKeys(ConcatKey);
M:=AnsiStrToBin(S);
IPKey:=GetIPKey(M,ConcatKey);
SetLength(RL,64);
For I:=0 To 31 Do
Begin
RL[I]:=IPKey[16].R[I];
RL[I+32]:=IPKey[16].L[I];
End;
RL:=GetReverseIP(RL);
Result:=RL;
End;
end.
Қорытынды
Қорытынды ретінде, әртүрлі алгоритмдерді шифрлеу негізіндегі жасалған анализдер, желі мәліметтерінің ақпаратты қорғау процессінде қарастырылған кез келген алгоритмдерді қолдануға болады. DES алгоритмінің артықшылығы оның жылдамдылығы болып табылады. Барлық блоктік алгоритмдер сияқты мәліметтерді шифрлеу кезінде тез арада қолдануға мүмкіндік береді. DES стандартында криптоқорғау құрылғысын қолданған кезде оператор теориялық қарсыластың кілтін таңдағанда барлық комбинацияларды қолданбай табуына мүмкіндік береді. Сондықтан кілтті қорғау әдісін білу керек.