![]() |
Eine BigInt Klasse + RSA-Beispiel
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich habe vor einiger Zeit eine BigInt-Klasse implementiert und sie erfolgreich in einigen Verschlüsselungsprojekten eingesetzt. Die BigInt-Klasse implementiert große (big, large oder huge) Integerzahlen, die in einem dynamischen Array von 32-Bit-Werten gespeichert werden. Die Basis ist demnach 2^32, wobei man sich darüber keine großen Gedanken machen muss, da Konvertierungsfunktionen zur Basis 10 bereitstehen. Wer möchte, kann die einzelnen digits jedoch auch direkt ansprechen und verändern. Implementiert wurden Vergleichsoperatoren (>, <, =, >= usw.) und arithmetische Funktionen wie +, -, *, div, mod, exp sowie der erweiterte Euklidsche Algorithmus, so dass man ohne all zu großen Aufwand die typischen asymmetrischen kryptografischen Verfahren implementieren kann (für Elliptische Kurven muss man die Klasse um Punktoperationen erweitern, das sollte jedoch kein all zu großes Problem darstellen.). Die Lizenz ist fair :lol: - habe ich von Assarbad übernommen, ich hoffe mal, er verzeiht mir... Klasse: Siehe Anhang und Text oben. Beispiel: Erzeugt RSA-Schlüssel bis 4096bit. Mehr sollte man nicht wählen, das dauert sonst zu lange. Ich habe auf Wunsch nun auch noch die zwei Funktionen rsa_encrypt und rsa_decrypt implementiert, mit denen man Puffer beliebiger Länge verschlüsseln kann. Ich rate aber dringend davon ab, ganze Dateien auf diese Weise zu verschlüsseln. Häufig wird mit RSA nur ein zufällig erstellter Schlüssel z.B. für AES oder RC4 mittels RSA verschlüsselt, der Rest wird dann mittels AES/RC4 und dem zufälligen Schlüssel "unkenntlich" gemacht. Gruß peanut. |
Re: Eine BigInt Klasse
Bitte häng doch deinen Code (der ja nicht kurz ist) als Anhang an. Danke :)
PS: OpenSource wäre doch die bessere Sparte gewesen? In die Codelib sollen verzugsweise kleine Schnipsel :) |
Re: Eine BigInt Klasse + RSA-Beispiel
Falsch!!!
Delphi-Quellcode:
Richtig:
procedure TBigInt.Free;
begin if (Assigned(Self)) then begin ZeroMemory(@FDigits[0], DigitCount*4); // object might handle prime factors for SetLength(FDigits, 0); // crypto keys - overwrite memory with zeros FNegative := False; Inherited Free; end; end;
Delphi-Quellcode:
destructor TBigInt.Destroy;
begin ZeroMemory(@FDigits[0], DigitCount*4); // object might handle prime factors for // crypto keys - overwrite memory with zeros // SetLength(FDigits, 0); // Delphi destroys dyn. arrays inherited; end; |
DP-Maintenance
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.
Passt hier dann doch besser ;) |
Re: Eine BigInt Klasse + RSA-Beispiel
ich auch, ich auch ._.
Delphi-Quellcode:
Inherited Free; oderauch nur Inherited; (der Name kann hier weggelassen werden) muß unbedingt aufgerufen werden, also wenn du schon eine IF-Abrfage machst, dann muß dieses außerhalb stehen
procedure TBigInt.Free;
begin if (Assigned(Self)) then begin ZeroMemory(@FDigits[0], DigitCount*4); // object might handle prime factors for SetLength(FDigits, 0); // crypto keys - overwrite memory with zeros FNegative := False; end; Inherited Free; end; Und wie mein Vorgänger schon sagte ... der Rest wird eh freigegeben (aber nur, wenn INHERITED aufgerufen wird)
Delphi-Quellcode:
procedure TBigInt.Free;
begin ZeroMemory(@FDigits[0], DigitCount*4); // object might handle prime factors for Inherited Free; // crypto keys - overwrite memory with zeros end; |
Re: Eine BigInt Klasse + RSA-Beispiel
Himi, du enttäuschst mich :(
Finalisationscode gehört immer in den Destruktor! :warn: Free ist nicht umsonst nur als
Delphi-Quellcode:
implementiert... Und vor allem statisch. Free ist nur deshalb die Freigabemethode der Wahl, eben deshalb, weils mit .Destroy bei ner Nil-Referenz knallt, bei Free nicht.
if Assigned(Self) then
Destroy; |
Re: Eine BigInt Klasse + RSA-Beispiel
Zitat:
Desweiteren ist die Möglichkeit, Methoden zu überschreiben ja teilweise auch dazu gedacht, die ursprüngliche Methode nämlich nicht immer, sondern nur im passenden Moment aufzurufen... Daher gehört das inherited sicherlich nicht immer nach außen, ans Ende oder sonst wohin! |
Re: Eine BigInt Klasse + RSA-Beispiel
Hallo
könntest du nicht mal ein beispiel Projeckt adden,habe keine ahnung wie ich das nutzen kann! Ich selber was nun nicht was ich machen muß um RSA anzuwenden? Bin für jede hilfe dankbar :P Grüße Triples
Code:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin if edit1.text='Hilfe' then begin enabel.Butten1 showmessage(' Das Kennwort ist Richtig!'); close; end else begin showmessage(' Das Kennwort ist FALSCH!'); edit1.SelectAll; edit1.SetFocus; end; end; |
Re: Eine BigInt Klasse + RSA-Beispiel
Hallo,
habe es korrigiert und mich für himitsu's Vorschlag entschieden... Danke für die Hinweise! Zitat:
|
Re: Eine BigInt Klasse + RSA-Beispiel
Zitat:
Was shmia vielleicht hätte etwas hervorheben sollen und was Dax auch schon geschrieben hat: du solltest nie die Methode Free überschreiben sondern immer den Destruktor Destroy, und das mit override - dort gehört dein Aufräumcode hinein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz