Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
35
Добавлен:
27.04.2015
Размер:
3 Кб
Скачать
☆
   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