Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.04.2009, 17:29
 qwerty  qwerty вне форума
Прохожий
 
Регистрация: 14.04.2009
Сообщения: 2
Репутация: 10
По умолчанию Шифрование методом диффи-хеллмана

ЗДравствуйте. Есть ли у кого-нибудь исходник реализаующий данный метод?
Ответить с цитированием
  #2  
Старый 14.04.2009, 17:48
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от  qwerty
ЗДравствуйте. Есть ли у кого-нибудь исходник реализаующий данный метод?
А тем-ка то уже подымалась http://www.delphisources.ru/forum/showthread.php?p=4983
А тут вроде сам алгоритм: http://ru.wikipedia.org/wiki/Криптос...мира-Адельмана
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 14.04.2009 в 17:52.
Ответить с цитированием
  #3  
Старый 14.04.2009, 18:11
 qwerty  qwerty вне форума
Прохожий
 
Регистрация: 14.04.2009
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо, но там я ответа не нашёл.
у меня имеется исходник с названием диффи-хеллмана, но в нём всё как-то мудрено, и мне кажется что это толи модификация какая-то, толи вообще другой метод
Код:
-	Код формы формирования ключа:
unit Unit_kluch;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm_kluch = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Label3: TLabel;
    StringGrid2: TStringGrid;
    Label5: TLabel;
    StringGrid3: TStringGrid;
    Label4: TLabel;
    Button4: TButton;
    SaveDialog1: TSaveDialog;
    Button5: TButton;
    SaveDialog2: TSaveDialog;
    Button6: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_kluch: TForm_kluch;

implementation

uses Unit_zashifr, Unit_rasshifr;


{$R *.dfm}
function NOD(A: integer;  B: integer): integer;
begin
    while (a <> 0) and (b <> 0) do
       if a >= b then
         a := a mod b
       else 
         b := b mod a;
    NOD := a + b; { один - ноль }
end;

procedure TForm_kluch.Button1Click(Sender: TObject);
var
  c,i,j,u,v: integer;
  a: array[1..8] of integer;
  b: array[1..8] of integer;
  p: array[1..8] of integer;
begin
if Edit1.Text='' then
   showmessage('Введите целое число >255 для генерации ключа!')
else if strtoint(Edit1.Text)<=255 then
   showmessage('Введите целое число >255 для генерации ключа!')
else
begin
u:=strtoint(Edit1.Text);
randomize;
p[1]:=random(7)+1;
c:=1;
for i:=2 to 8 do
    while (c<i) do
      begin
        p[i]:=random(8)+1;
        c:=1;
        for j:=1 to i-1 do
          if (p[i]<>p[j]) then
            c:=c+1;
      end;
b[1]:=1;
for i:=2 to 8 do
  b[i]:=b[i-1]*2;
i:=0;
v:=0;
while (i<>1) and (v<u) do
  begin
   v:=random(u);
   i:=NOD(v,u)
 end;
for i:=1 to 8 do
  begin
      a[i]:=(v*b[p[i]]) mod u
  end;
label3.visible:=true;
label5.visible:=true;
stringgrid2.visible:=true;
stringgrid3.visible:=true;
button5.visible:=true;
button6.visible:=true;
stringgrid2.cells[0,0]:='a';
stringgrid3.cells[0,0]:='p';
stringgrid3.cells[0,1]:='v';
stringgrid3.cells[0,2]:='u';
stringgrid3.cells[0,3]:='b';
stringgrid3.cells[1,1]:=inttostr(v);
stringgrid3.cells[1,2]:=inttostr(u);
for i:=1 to 8 do
  begin
    stringgrid2.cells[i,0]:=inttostr(a[i]);
    stringgrid3.cells[i,0]:=inttostr(p[i]);
    stringgrid3.cells[i,3]:=inttostr(b[i])
  end;
end;
end;

procedure TForm_kluch.Button4Click(Sender: TObject);
begin
Form_kluch.close
end;

procedure TForm_kluch.Button5Click(Sender: TObject);
var i: integer;
begin
if savedialog1.Execute then
  begin
    memo1.text:='';
    for i:=0 to 7 do
      memo1.text:=memo1.text+stringgrid2.cells[i+1,0]+';';
    memo1.lines.SaveToFile(savedialog1.FileName);
  end
end;

procedure TForm_kluch.Button6Click(Sender: TObject);
var i: integer;
begin
if savedialog2.Execute then
  begin
    memo1.text:='';
    for i:=0 to 7 do
      begin
        memo1.text:=memo1.text+stringgrid3.cells[i+1,0]+';';
        memo1.text:=memo1.text+stringgrid3.cells[i+1,3]+';'
      end;
    memo1.text:=memo1.text+stringgrid3.cells[1,1]+';';
    memo1.text:=memo1.text+stringgrid3.cells[1,2]+';';
    memo1.lines.SaveToFile(savedialog2.FileName);
  end
end;

end.

-	Код формы шифрования текста:
unit Unit_rashifr;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm_rasshifr = class(TForm)
    Label4: TLabel;
    Label5: TLabel;
    StringGrid3: TStringGrid;
    Label2: TLabel;
    Button1: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    SaveDialog1: TSaveDialog;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_rasshifr: TForm_rasshifr;

implementation

{$R *.dfm}

function BinToInt(bin: string): integer;
var
  i,j,h: integer;
begin
   Result := 0;
   for i := 1 to 8 do
     begin
       h:=1;
       for j := 1 to 8-i do
         h:=h*2;
       Result := Result+StrToInt( bin[i])*h;
     end;
end;



procedure TForm_rasshifr.Button1Click(Sender: TObject);
var k,l,a,i,j,n,s,u,v,d,v1: integer;
  b: array[1..8] of integer;
  p: array[1..8] of integer;
  r: array[1..8] of integer;
  m: array[1..8] of integer;
  c: string;
//  m: array[1..8] of string;
  t: string;
begin
n:=0;
for i:=1 to 8 do
  if (StringGrid3.Cells[i,0]='') or (StringGrid3.Cells[i,3]='') then n:=n+1;
if (StringGrid3.Cells[1,1]='') or (StringGrid3.Cells[1,2]='') then n:=n+1;
if n>0 then
   showmessage('Введите секретный ключ!')
else
begin
Memo1.text:='';
c:=Memo2.Text;
v:=strtoint(stringgrid3.cells[1,1]);
u:=strtoint(stringgrid3.cells[1,2]);
v1:=2;
while ((v1*v) mod u <>1) do
  v1:=v1+1;
for i:=1 to 8 do
  begin
    p[i]:=strtoint(stringgrid3.cells[i,0]);
    b[i]:=strtoint(stringgrid3.cells[i,3]);
    a:=a+((v*b[i]) mod u);
  end;
l:=length(inttostr(a));
n:=length(c);
k:=Trunc(n/l);
for j:=1 to k do
  begin
    s:=strtoint(copy(c,(j-1)*l+1,l));
    d:=(s*v1) mod u;
    for i:=0 to 7 do
      begin
        r[8-i]:=Trunc(d/b[8-i]);
        d:=d mod b[8-i]
      end;
    for i:=1 to 8 do
      m[i]:=r[p[i]];
    t:='';
    for i:=1 to 8 do
       t:=t+inttostr(m[i]);
    Memo1.text:=Memo1.text+chr(bintoint(t));
  end;
label1.visible:=true;
Memo1.visible:=true;
end;
end;
procedure TForm_rasshifr.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then memo2.Lines.LoadFromFile(opendialog1.FileName);
end;

procedure TForm_rasshifr.Button3Click(Sender: TObject);
begin
if savedialog1.Execute then memo1.Lines.SaveToFile(savedialog1.FileName);
end;

end.

-	Код формы дешифрования текста:
unit Unit_rasshifr;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm_rasshifr = class(TForm)
    Label4: TLabel;
    Label5: TLabel;
    StringGrid3: TStringGrid;
    Label2: TLabel;
    Button1: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    SaveDialog1: TSaveDialog;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    OpenDialog2: TOpenDialog;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_rasshifr: TForm_rasshifr;

implementation

{$R *.dfm}

function BinToInt(bin: string): integer;
var
  i,j,h: integer;
begin
   Result := 0;
   for i := 1 to 8 do
     begin
       h:=1;
       for j := 1 to 8-i do
         h:=h*2;
       Result := Result+StrToInt( bin[i])*h;
     end;
end;

procedure TForm_rasshifr.Button1Click(Sender: TObject);
var k,l,a,i,j,n,s,u,v,d,v1: integer;
  b: array[1..8] of integer;
  p: array[1..8] of integer;
  r: array[1..8] of integer;
  m: array[1..8] of integer;
  c: string;
  t: string;
begin
n:=0;
for i:=1 to 8 do
  if (StringGrid3.Cells[i,0]='') or (StringGrid3.Cells[i,3]='') then n:=n+1;
if (StringGrid3.Cells[1,1]='') or (StringGrid3.Cells[1,2]='') then n:=n+1;
if n>0 then
   showmessage('Введите секретный ключ!')
else
begin
Memo1.text:='';
c:=Memo2.Text;
v:=strtoint(stringgrid3.cells[1,1]);
u:=strtoint(stringgrid3.cells[1,2]);
v1:=2;
while ((v1*v) mod u <>1) do
  v1:=v1+1;
for i:=1 to 8 do
  begin
    p[i]:=strtoint(stringgrid3.cells[i,0]);
    b[i]:=strtoint(stringgrid3.cells[i,3]);
    a:=a+((v*b[i]) mod u);
  end;
l:=length(inttostr(a));
n:=length(c);
k:=Trunc(n/l);
for j:=1 to k do
  begin
    s:=strtoint(copy(c,(j-1)*l+1,l));
    d:=(s*v1) mod u;
    for i:=0 to 7 do
      begin
        r[8-i]:=Trunc(d/b[8-i]);
        d:=d mod b[8-i]
      end;
    for i:=1 to 8 do
      m[i]:=r[p[i]];
    t:='';
    for i:=1 to 8 do
       t:=t+inttostr(m[i]);
    Memo1.text:=Memo1.text+chr(bintoint(t));
  end;
label1.visible:=true;
Memo1.visible:=true;
Button3.visible:=true;
end;
end;
procedure TForm_rasshifr.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then memo2.Lines.LoadFromFile(opendialog1.FileName);
end;
procedure TForm_rasshifr.Button3Click(Sender: TObject);
begin
if savedialog1.Execute then memo1.Lines.SaveToFile(savedialog1.FileName);
end;
procedure TForm_rasshifr.Button4Click(Sender: TObject);
begin
Form_rasshifr.close
end;
procedure TForm_rasshifr.Button5Click(Sender: TObject);
var i,j: integer;
    kl:string;
    kluch: array[1..18] of string;
begin
if opendialog2.Execute then
  begin
    memo3.Lines.LoadFromFile(opendialog2.FileName);
    kl:=memo3.Text;
    for i:=1 to 18 do
      begin
        j:=pos(';',kl);
        kluch[i]:=copy(kl,1,j-1);
        delete(kl,1,j);
      end;
    for i:=1 to 8 do
      begin
        stringgrid3.cells[i,0]:=kluch[i*2-1];
        stringgrid3.cells[i,3]:=kluch[i*2]
      end;
    stringgrid3.cells[1,1]:=kluch[17];
    stringgrid3.cells[1,2]:=kluch[18]
  end;
end;
end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter