Affin tizimidagi Tsezar usulida matnlarni deshifrlash dasturi
Endi Affin tizimidagi Tsezar usulida shifrlangan matnlarni deshifrlash dasturi matnini keltiramiz. Dasturda lotin alfavitinini bosh harflaridan foydalanamiz. Xuddi shunday, qo`shimcha ravishda lotin alfavitining kichik harflarini kiritish ham mumkin. Bu erda kichik harflardan foydalanmaganligimiz uchun kichik harflarni ham bosh harflarga o`tkazdik. Agar shifrlangan matnda tinish belgilari va sonlar uchrasa, ular o`zgarishsiz qoldiriladi. Dasturda sonlar o`zaro bog’liq va tub ekanligi tekshirilmaydi. Chunki matnni shifrlash uchun kalit sonlar tekshirib, tanlab olingan bo`lishi kerak. Ularni yuqoridagi dastur yordamida tekshirib olinadi. Shifrlangan matnni deshifrlash uchun shifrlashda ishlatilgan kalit so`zlar ishlatilishi shart, aks holda deshifrlash natijasi noto`g’ri bo`ladi, ya`ni shifrlangan matn o`zgartirib yuboriladi. Dasturga shifrlangan matn qanday berilgan bo`lsa, shundayligicha kiritilishi lozim. Deshifrlangan matn bosh harflarda taqdim qilinadi.
Endi Affin tizimidagi Tsezar usulida matnlarni deshifrlash dasturi matnini keltiramiz:
{Affin kriptotizimi orqali shifrlash} uses crt;
Const d=25;
S:array[0..d] of char=('A','B','C','D','E','F','G','H','I','J','K',
'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
var
a,b:integer; strok,s2,dshifr:string[100]; s1:string[1];
kol,i:integer; id:byte;
j: integer;
{=== Matnni bosh harflar bilan yozish ======} function Boshharf(Matn: string): string;
var
i: integer; tmps:string; xarf:char;
begin tmps:='';
for i:=1 to length(Matn) do begin xarf:=chr(ord(Matn[i])); tmps:=tmps+upcase(xarf); end;
Boshharf:= tmps; end;
{======================Shifrlangan harfga mos alfavit harfi raqamini topish}
function Deshifr(n: byte):byte; var i,j:integer;
begin
for i:=0 to d do begin
j:=(a*i+b) mod(d+1);
if n=j then begin Deshifr:=i;break; end else Deshifr:=d+1;
end; end;
{======================Matn harfga mos alfavit harfi raqamini topish} function LotCharToInt(ch: string):byte;
var i:integer; begin
for i:=0 to d do
if ch=S[i] then begin LotCharToInt:=i;break; end else LotCharToInt:=d+1;
end;
{=======================Affin kriptotizimi orqali shifrlash======} BEGIN
CLRSCR;
write('Birinchi tub sonni kiriting ='); readln(a); write('Ikkinchi tub sonni kiriting ='); readln(b); write('Shifrlangan matnni kiriting='); readln(strok); TextColor(4);
writeln; writeln('DESHIFRLASH');writeln; writeln('Shifrlanadigan soz:');writeln; TextColor(1);
writeln(strok);writeln;
{strok suzidagi harflarni bosh harflarga almashtirish} dshifr:='';
s2:=Boshharf(strok); kol:=length(strok); for i:=1 to kol do begin s1:=copy(s2,i,1);
id:=LotCharToInt(s1); {harfning alfavitdagi ornini aniqlash} j:=Deshifr(id); {shifr raqamiga mos matn raqamini aniqlash} if j=d+1 then dshifr:=dshifr+s1
else dshifr:=dshifr+S[j]; end;
TextColor(4); writeln('Deshifrlangan soz:');writeln; TextColor(1);
writeln(dshifr);
{ readln;} end.
Do'stlaringiz bilan baham: |