Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prüfsummen erstellen (DEC) (https://www.delphipraxis.net/160378-pruefsummen-erstellen-dec.html)

ringli 10. Mai 2011 14:57

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:
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;
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.

Hat einer von euch eine zündende Idee?

DeddyH 10. Mai 2011 15:02

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.

Neutral General 10. Mai 2011 15:02

AW: Prüfsummen erstellen (DEC)
 
Hallo,

Wie wärs damit?

Delphi-Quellcode:
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;
Alternativ:

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;

ringli 10. Mai 2011 15:10

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;

Neutral General 10. Mai 2011 15:13

AW: Prüfsummen erstellen (DEC)
 
Hallo,

Also in meiner Hash.pas die ich mir eben runtergeladen hab bei torry.net (http://www.torry.net/authorsmore.php?id=1881) existiert eine Klasse THash.

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:

DeddyH 10. Mai 2011 15:16

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;

ringli 10. Mai 2011 15:19

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. ;)

DeddyH 10. Mai 2011 15:20

AW: Prüfsummen erstellen (DEC)
 
Klassenmethoden kannst Du ohne Instanz aufrufen, musst also auch keine Instanz freigeben.

Neutral General 10. Mai 2011 15:26

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