Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
27.04.2015
Размер:
3.49 Кб
Скачать
program RSA_sh;
uses WinCrt;
{$F+}
{$L longarif.obj}
var
m1:array[1..100]of byte; { это буфера для длинной арифметики}
m2:array[1..100]of byte; { для хранения длинных целых чисел }
len:word; { это длина длинных целых чисел }
i,ll:integer;
j,k,m,nb:integer;
f1,f2:file; { файловые переменные }
numf1,numf2:string; { для имен файлов }
nr,nw:word; {county} { счетчики }

buf1:array[1..100]of byte; { буфера чтения и записи }
buf2:array[1..200]of byte; { при работе с файлами }

const
{ это ключи }
{ P=31 Q=43 тогда N=1333, K=(P-1)(Q-1)=1260 }
{ e=97 d=13 и ed=1(mod K) }
{ e и N - открытый ключ , d,P,Q - закрытый ключ }
e:integer=97;
N:integer=1333;

{ это процедуры длинной арифметики }

procedure AddBIN(l:word;var M1,M2);external;
{процедура сложения длинных целых чисел }
{ результат в M1 }
procedure SubBIN(l:word;var M1,M2);external;
{процедура вычитания длинных целых чисел }
{ M1=M1-M2}
procedure MulBIN(l:word;var M1,M2);external;
{ процедура умножения длинных целых чисел M1*M2}
{ младшая част в M1, старшая часть в M2}
procedure DivBIN(l:word;var M1,M2);external;
{процедура деления длинных целых чисел M1/M2 }
{ частное в M1, остаток в M2 }

begin
writeln(' Шифрование с помощью открытого ключа, RSA-алгоритм');
writeln(' не шифровать длинные файлы !!!'); writeln;
writeln(' исходный файл ?');
readln(numf1);
writeln(' зашифрованный файл ?');
readln(numf2);
assign(f1,numf1);
reset(f1,1);
assign(f2,numf2);
rewrite(f2,1);

writeln('введите N и e-отрытый ключ');
readln(N,e);

writeln('открытый ключ e=',e,' N=',N);

nb:=0; { номер шифруемого блока }
repeat
blockread(f1,buf1,sizeof(buf1),nr);
for i:=1 to nr do
begin
{ возведение очередного байта в степень e}



begin
for ll:=1 to 100 do m1[ll]:=0;
end;
begin
for ll:=1 to 100 do m2[ll]:=0;
end;



m1[1]:=buf1[i]; m2[1]:=buf1[i];
for j:=1 to e-1 do
begin
MulBIN(100,m1,m2);
m2[1]:=buf1[i];
end;
{ вычисление остатка от деления на N }




begin
for ll:=1 to 100 do m2[ll]:=0;
end;
{ результат должны записать в два байта }
m2[1]:=N mod 256;
m2[2]:=N div 256;
DivBIN(100,m1,m2); {остаток в m2}
{ запись зашифрованного байта в два байта }
buf2[2*i-1]:=m2[1];
buf2[2*i]:=m2[2];
end;
blockwrite(f2,buf2,2*nr,nw);
nb:=nb+1;
writeln('зашифровано ',nb*100,' байт');
until (nr=0) or (nw<>2*nr);

close(f1);
close(f2);
writeln(' файл зашифрован');


end
.
Соседние файлы в папке лаб-р-защ-5