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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.04.2011, 17:42
versusln versusln вне форума
Прохожий
 
Регистрация: 28.04.2011
Сообщения: 2
Репутация: 10
По умолчанию Нужна помощь по шифру RSA

Всем привет! У меня есть программа, реализующая атаку бесключевым чтением РСА, но она работает только для небольших чисел(относительно ключей, которые необходимы). Возможно ли в этот код как-то, внедрить например, модули от FGint, чтобы все работало? Придется ли полностью переписывать сами процедуры зашифрования/расшифрования и т.д.? Это для диплома, тема - исследование стойкости рса в зависимости от длины ключей. Сильно не срамите, если что, я еще только учусь Вот программа:


Код:
unit Unit16;

interface

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

type

  TIncodeMes = array of longint;

  TForm16 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Memo3: TMemo;
    Button2: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Image1: TImage;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button3: TButton;
    Edit4: TEdit;
    Edit5: TEdit;
    Button4: TButton;
    Memo4: TMemo;
    Button5: TButton;
    Button6: TButton;
    Edit6: TEdit;
    Memo5: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    FMes,AttFMes,NAttFMes: TIncodeMes;
  public
    { Public declarations }
  end;

var
  Form16: TForm16;

implementation
uses math;

{$R *.dfm}
//Значение бита в двойном слове (32бита)
function Bit(Value, n: Integer): Boolean;
asm
   bt eax, edx
   setc al
   and eax, 0FFh
end;

//Функция быcтрого возведения в степень
function FastPower(a, b, n: integer): integer;
var i: integer;
    ai: extended;
begin
  ai := a;
  for I := Trunc(log2(b)) - 1 downto 0 do
  if Bit(b, i) then ai := Round(sqr(ai) * a) mod n else ai := Round(sqr(ai)) mod n;
  result := Round(ai);
end;

function Encrypt(s: string; e, n: integer): TIncodeMes;
  var I: Integer;
begin
  SetLength(result, length(s));
  for I := 0 to Length(s) - 1 do
    result[i] := FastPower(ord(s[i+1]), e, n)
end;

function Decrypt(s: array of integer; e, n: integer): string;
  var i: Integer;
begin
  SetLength(Result, Length(s));
  for I := 0 to Length(s) - 1 do
    result[i + 1] := chr(FastPower(s[i], e, n))
end;

function Nod(a,b:integer):integer;
var i:integer;
begin
  while a<>b do if a>b then a:=a-b else b:=b-a;
  result:=a;
end;

function ArrayToString(a: TIncodeMes): String;
var
i: Integer;
begin
 Result := '';
 for i := Low(a) to High(a) do
 Result := Result + inttostr(a[i]);
end;

//Шифрование текста в Memo
procedure TForm16.Button1Click(Sender: TObject);
  var i, n, e: Integer;
begin
  n := StrToInt(Edit3.Text);
  e := StrToInt(Edit2.Text);
  FMes := Encrypt(Memo1.Lines.Text, e, n);
  for i :=0 to high(Fmes) do Memo2.Lines.Append(inttostr(FMes[i]));
end;

//Дешифровка сообщения
procedure TForm16.Button2Click(Sender: TObject);
  var i, n, d: integer;
      s : string;
begin
  d := StrToInt(Edit1.Text);
  n := StrToInt(Edit3.Text);
  s := Decrypt(FMes,d , n);
  Memo3.Lines.Add(s);
end;

procedure TForm16.Button3Click(Sender: TObject);
 var n,p,q,F,i,e,k,d:integer;
begin
  p:=strtoint(edit4.Text);
  q:=strtoint(edit5.Text);
    n:=p*q;
    F:=(p-1)*(q-1);
    randomize;
  for i:=2 to F do
    if nod(i,F)=1 then
      begin
        e:=i;
        break;
      end;
 k:=1;
 while (k*F+1)mod e<>0   do
  inc(k);
  d:=(k*F+1)div e;
 edit1.Text:=inttostr(d);
 edit2.Text:=inttostr(e);
 edit3.Text:=inttostr(n);
end;

procedure TForm16.Button4Click(Sender: TObject);
 var i, j, n, e, ct, ct1, tempint1: Integer;
 A: array of integer;
 dwStart, dwEnd, dwDiff : DWORD;
begin
  dwStart := GetTickCount();
  ct1:=0;
  n := StrToInt(Edit3.Text);
  e := StrToInt(Edit2.Text);
  SetLength(A, Memo2.Lines.Count);
  for i:=0 to (Memo2.Lines.Count-1) do A[i] := FastPower(strtoint(Memo2.Lines[i]), e, n);
   repeat
    ct:=0;
    for i:=0 to Memo2.Lines.Count-1 do
    begin
     A[i]:= FastPower(A[i], e, n);
     if IntToStr(A[i])=Memo2.Lines[i] then inc(ct);
    end;
    inc(ct1);
   until ct=Memo2.Lines.Count;
   for i:=0 to (Memo2.Lines.Count-1) do A[i] := FastPower(strtoint(Memo2.Lines[i]), e, n);
   for i := 0 to ct1-2 do
   begin
     for j:=0 to (Memo2.Lines.Count-1) do A[j] := FastPower(A[j], e, n);
   end;
   for i:=0 to (Memo2.Lines.Count-1)do Memo4.Lines.Text:=Memo4.Lines.Text+chr(A[i]);
   for i:=1 to 100 do
   Sleep(10);
   dwEnd := GetTickCount(); // конец блока кода
   dwDiff := dwEnd - dwStart; // вычисляем разницу
   ShowMessage('Взлом занял '+IntToStr(dwDiff)+' мсек.');
end;

procedure TForm16.Button5Click(Sender: TObject);
begin
 Memo3.Lines.Clear;
 Memo2.Lines.Clear;
 Memo1.Lines.Clear;
 Memo4.Lines.Clear;
 Memo5.Lines.Clear;
end;
end.
Ответить с цитированием
  #2  
Старый 28.04.2011, 21:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну я бы для начала попробовал бы использовать Int64. Может длинны для диплома хватит.
Ответить с цитированием
  #3  
Старый 02.05.2011, 06:08
versusln versusln вне форума
Прохожий
 
Регистрация: 28.04.2011
Сообщения: 2
Репутация: 10
По умолчанию

думаю, не хватит( да и интеджеры там стоят, потому что нужно сначала было сам алгоритм проверить
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter