![]() |
Prüfsummen erstellen (DEC)
Hallo,
ich möchte mir mithilfe des DEC ein Programm zum Berechnen von Prüfsummen (MD5, SHA1, etc.) erstellen. Natürlich möchte ich dabei verschiedene Formate zur Verfügung haben. Leider habe ich grade keine Idee wie ich das mit mehreren Formaten elegant lösen kann.
Delphi-Quellcode:
Natürlich funktioniert der Code in dieser Art nicht, aber ich hoffe es ist einigermaßen verständlich worauf ich hinaus will. Ich möchte über eine Combobox o.ä. eine der verfügbaren Verschlüsselungen auswählen und diese dann zur Berechnung der Prüfsumme verwenden.
var
Hash : THash_MD5; Hash : THash_SHA1; // funktioniert so natürlich nicht! s : String; begin case Combobox1.Itemindex of 0 : Hash := THash_MD5.Create; 1 : Hash := THash_SHA1.Create; end; s := Hash.CalcFile('Dateiname', TFormat_HEX); showmessage(String(s)); end; Hat einer von euch eine zündende Idee? |
AW: Prüfsummen erstellen (DEC)
Haben die Hash-Klassen keinen gemeinsamen Vorfahren (THash oder so?). Dann könntest Du die Variable als Vorfahrklasse deklarieren und später die Instanz der benötigten Kindklasse erzeugen.
|
AW: Prüfsummen erstellen (DEC)
Hallo,
Wie wärs damit?
Delphi-Quellcode:
Alternativ:
var S : String;
begin case Combobox1.ItemIndex of 0 : S := THash_MD5.CalcFile('Dateiname', TFormat_HEX); 1 : S := THash_SHA1.CalcFile('Dateiname', TFormat_HEX); end; ShowMessage(S); end;
Delphi-Quellcode:
var S : String;
Hash: THash; begin case Combobox1.ItemIndex of 0 : Hash := THash_MD5.Create; 1 : Hash := THash_SHA1.Create; end; S := Hash.CalcFile('Dateiname', TFormat_HEX); ShowMessage(S); end; |
AW: Prüfsummen erstellen (DEC)
@DeddyH:
Zumindest habe ich keine solche Vorfahrklasse gefunden. Das war nämlich auch mein erster Ansatz. @Neutral General: Deine Alternative Methode würde mir ja am besten gefallen, nur leider scheint es keine Vorfahrklasse THash zu geben. :( [EDIT] Ah, ok mir ist es grad wie Schuppen von den Augen gefallen. Die Lösung sieht so aus:
Delphi-Quellcode:
var S : String;
Hash: TDecHash; // <-- begin case Combobox1.ItemIndex of 0 : Hash := THash_MD5.Create; 1 : Hash := THash_SHA1.Create; end; S := Hash.CalcFile('Dateiname', TFormat_HEX); ShowMessage(S); end; |
AW: Prüfsummen erstellen (DEC)
Hallo,
Also in meiner Hash.pas die ich mir eben runtergeladen hab bei torry.net ( ![]() Wobei es im Prinzip ja eh unnötig ist eine Instanz zu erstellen. Von daher kannst du auch meine 1. Lösung benutzen. Ist auch ein bisschen Resourcen sparender :duck: |
AW: Prüfsummen erstellen (DEC)
Wenn das Klassenmethoden sind kann man sich die Instanzen in der Tat sparen. Einfach aufrufen und glücklich sein :mrgreen:.
Und wenn nicht, dann aber eher so:
Delphi-Quellcode:
var S : String;
Hash: TDecHash; // <-- begin Hash := nil; case Combobox1.ItemIndex of 0 : Hash := THash_MD5.Create; 1 : Hash := THash_SHA1.Create; end; if Assigned(Hash) then try S := Hash.CalcFile('Dateiname', TFormat_HEX); ShowMessage(S); finally Hash.Free; end; end; |
AW: Prüfsummen erstellen (DEC)
Müsste ich die Klassenmethoden nicht trotzdem freigeben? Und wieso spare ich bei Neutral General's 1. Variante Resourcen?
@DeddyH: Grade dein Edit gesehen. Das Freigeben hatte ich mir in meinem Beispielcode gespart. Wollte nur mein Problem verdeutlichen. ;) |
AW: Prüfsummen erstellen (DEC)
Klassenmethoden kannst Du ohne Instanz aufrufen, musst also auch keine Instanz freigeben.
|
AW: Prüfsummen erstellen (DEC)
@DeddyH: Huch da hab ich glatt das Freigeben vergessen :oops:
@ringli: Bei deiner, bzw. meiner 2. Variante werden 2 Hash-Objekte erzeugt. Einmal erzeugt man selbst eins und in CalcFile wird dann intern nochmal ein Hash-Objekt erzeugt (und wieder freigegeben). Das selbst erzeugte ist somit nicht nötig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 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