AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hacken bei RSA-Verfahren

Ein Thema von Meisterschmied · begonnen am 18. Nov 2003 · letzter Beitrag vom 23. Nov 2003
Antwort Antwort
Meisterschmied

Registriert seit: 3. Nov 2003
45 Beiträge
 
#1

Re: Hacken bei RSA-Verfahren

  Alt 18. Nov 2003, 20:43
Danke Hagen,

scheint es aber nicht zu sein. Ich komm zwar auch auf deinen Wert, aber die Verschlüsselung klappt nicht besser. Bei diesen Werten bekomme ich (wenn ich 26 verschlüsseln will) für

m^e mod n = 26^3 mod p*q = 17576

und

c^d mod n = 32184

Ich hab mal meinen Code reingeschrieben (das ist die Kurzform, dich ich aus Codeschnipseln in eine neue Anwendung geschrieben habe - ist sonst sehr viel länger...). Ich muss außerdem noch kurz warnen, dass er fürchterlich ist, trotzdem scheint er zu funktionieren. Das war oberste Priorität. Schönheit und Effizienz kommt später (für Tipps bin ich aber natürlich immer zu haben ).

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, d, p, q : integer;
begin
  p := 227;
  q := 251;
  a := lcm(226,250);
  d := 3;

  repeat
  Inc(d);
  until ((3*d - 1) mod a) = 0;

  Edit1.Text := IntToStr(d);   // 9417

  Edit2.Text := IntToStr(FastExponation(26,3,p*q)); // 17576
  Edit3.Text := IntToStr(FastExponation(StrToInt(Edit2.Text),d,p*q)); // 32184

end;

function lcm(A, B: Integer): Integer;
begin
  if A = B then Result := Abs(A) else
    if (A = 0) or (B = 0) then Result := 0
      else Result := Abs(A div gcd(A, B) * B);
end;

function gcd(a, b : integer): Integer;
var
  H : Integer;
begin
// Wir verwenden den Euklidischen Algorithmus zur Bestimmung des größten
// gemeinsamen Teilers (gcd = greatest common divisor)

while b > 0 do
  begin
    H := a mod b;
    a := b;
    b := H;
  end;

  Result := a;

end;

function FastExponation(J, exp, n : integer): Integer;
var
  Base, I, T : integer;
begin
  IntToBin(exp);

  Base := J;
  T := Base;
  For I := 2 To length(Bin)-1 do begin
    T := (T*T) mod n;
    If Bin[I] = 1 Then T := (T*Base) mod n;
  end;
  Result := T;
end;

function IntToBin(Int: integer): string;
var
  I : integer;
begin
  BinS := '';
  // Erzeugung eines Binärstrings
  repeat
    BinS := IntToStr(Int mod 2) + BinS;
    Int := Int div 2;
  until Int = 0;

  Setlength(Bin, Length(BinS)+1);

  // In ein Array zerlegen
  For I := 1 To Length(BinS) do
  Bin[I] := StrToInt(Copy(BinS,I,1));

end;
Danke schon mal,

Wieland
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz