Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2013, 19:44   #1
W. Aron
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 25
По умолчанию Шифрование текста методом Эль-Гамаля

Вечер добрый.
Возникла небольшая проблема.
Приведенный ниже код отлично шифрует и расшифровывает слова (не предложения, т.к "пробел" я не добавлял)... НО, использует простые числа от "2" до "17". Естественно в этом заключается весомый минус.
Для маленьких ключей дешифровку вы никогда не получите))
Числа в фигурных скобках, при генерации ключей, обеспечивают расшифровку букв от "a" до "q" (или "р"). Числа выше "17" выходят за диапазон Int64, вызывая ошибку с плавающей точкой.
Собственно вопрос: подскажите мне способ как увеличить количество простых чисел хотя бы до "29", поскольку в теории этого хватит чтобы покрыть англ. алфавит. Я читал что надо задействовать некий модуль FGInt, однако я в нем не разберусь, даже с ч-л помощью.
Код:
Var
 primes : Array[1..7] Of integer =
      (2, 3, 5, 7, 11, 13, 17);
 abet:array[0..25] of char;
 p,g,k,y,x: Integer;

procedure TForm1.Button1Click(Sender: TObject);
Var
 i,j:integer;
 p1,g1,x1,y1:string;
begin
 j:=1+random(7);
 i:=2+random(6);
  while (j>i) or (j=i) do
   begin
    j:=1+random(7);
   end;
 p:={17}primes[i];
 g:={13}primes[j];
 x:={8}RandomRange(1,p-1);
 y:={1}(Round(exp(x*ln(g)))) mod p;
 p1:=p1+IntToStr({p}primes[i]);
 g1:=g1+IntToStr({g}primes[j]);
 x1:=x1+IntToStr(x);
 y1:=y1+FloatToStr(y);
 edit1.Text:=p1;
 edit2.Text:=g1;
 edit3.Text:=x1;
 edit4.Text:=y1;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i,j,M:integer;
 M1:string;
 a,b:Int64;
begin
Memo1.Lines.Clear;
k:={13}RandomRange(1,p-1);
edit6.Text:=IntToStr(k);
for i:=0 to 25 do abet[i]:=chr(97+i);
M1:=Edit5.Text;
for j:=1 to length(M1) do
  for i:=0 to 25 do
    if M1[j]=abet[i] then
      begin
        M:=i;
        a:=(Round(exp(k*ln(g)))) mod p;
        b:=(Round(exp(k*ln(y)))*M) mod p;
        Memo1.Lines[0]:=Memo1.Lines[0]+IntToStr(a)+','+IntToStr(b)+',';
      end;

end;


procedure TForm1.Button3Click(Sender: TObject);
var
SLA: array[1..50] of string;
SLB: array[1..50] of string;
 i,j,n,t,a,b,c,d,M,posS,sort:integer;
 M1,M2,a1,b1:string;
begin
 c:=1;
 d:=1;
 j:=1;
 sort:=1;
 M1:=Memo1.Lines.Text;

 while Pos(',',M1)<>0 do
  begin
  posS:=pos(',',M1);
    if (sort Mod 2)<>0 then
     begin
      SLA[c]:=copy(M1,0,posS-1);
      c:=c+1;
     end
    else
     begin
      SLB[d]:=copy(M1,0,posS-1);
      d:=d+1;
     end;
   sort:=sort+1;
   delete(M1,1,posS);
  end;


  For i:=1 to 20 do
   begin
    if SLA[i]='' then
     Break
     else
    a:=StrToInt(SLA[i]);
    {for n:=1 to k do
     begin
       a:=a*a;
     end; }
    b:=StrToInt(SLB[j]);
    M:=(b*(Round(exp((p-1-x)*ln(a))))) mod p;
    {M:=(b*a) mod p;}
    for t:=0 to 25 do
     begin
       if t=M then
       M2:=M2+abet[t];
       end;
       {M2:=M2+IntToStr(M);}
    j:=j+1;
     end;

 edit7.Text:=M2;
end;


end.
W. Aron вне форума Ответить с цитированием
Старый 27.10.2013, 12:27   #2
W. Aron
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 25
По умолчанию

Жаль, что не нашлось людей...
Ну что ж.
Мне понадобилось ок. получаса, чтобы выявить числа, при которых покрывается весь алфавит и вычисления не выходят за диапазон Int64.
p=29; g=3; x=21; y=17; k=4;
Для демонстрации со случайным генерированием думаю сойдет и мой начальный вариант с половиной алфавита. Для полноценного шифрования используйте эти числа.
Я все же надеюсь, что найдутся добрые люди, которые помогут в нахождении простого способа работы с большими числами. А иначе просто закройте эту тему...
W. Aron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шифр эль гамаля на Delphi Athen Помощь студентам 9 04.03.2014 12:03
криптосистема эль-гамаля C# AL_LORD Помощь студентам 3 03.10.2012 01:20
Генерация параметров (p и g ).Для ЭЦП Эль-Гамаля Mirrok Помощь студентам 0 21.05.2012 23:14
криптосистема Эль-Гамаля Nanochka Помощь студентам 16 21.04.2012 10:53