Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hash mit DEC: wie und welchen (https://www.delphipraxis.net/57409-hash-mit-dec-wie-und-welchen.html)

Davidb 20. Nov 2005 21:50


Hash mit DEC: wie und welchen
 
Moin,
also ich versuche jetzt schon seit einiger Zeit mit dem DEC einen Hash von einem string
zu erstellen. Ich habe mich erstmal für MD5 entschieden. Das problem ist jetzt, dass ich bei
THash_MD5.create() immer folgende meldung bekomme:
[Error] test.pas(82): E2035 Not enough actual parameters
ist ja eigentlich auch klar weil THash_MD5.create() den parameter TProtection erwartet ("sagt" mir zumindest delphi).
Es ist nur so, dass ich keine ahnung habe was das für ein parameter sein soll.

würde mich sehr über hilfe freuen, :-D
david

Ps: würdet ihr mir überhaupt MD5 empfehlen oder ist eine der anderen hash functionen besser?

Davidb 21. Nov 2005 13:22

Re: Hash mit DEC: wie und welchen
 
Nach einigen gesuche in Hagens beispielen habe ich es jetzt halbwegs selbst hinbekommen, allerdings werden jetzt dauernd
exceptions gemeldet und der hash sieht auch immer gleich aus.
vielleicht könnt ihr mir ja sagen was ich alles falsch gemacht habe.
hier mal der Code:
Delphi-Quellcode:
procedure TForm1.codierenClick(Sender: TObject);
    var
      PHash: THash_MD5;
      s: string;
      i: Integer;
      j: Integer;
      n: Integer;
      Hpass: string;
      Format: Integer;
begin
    Format :=fmtHEXL;

    PHash := THash_MD5.create(nil);
    PHash.Init;
    Hpass := PHash.CodeString(pass, paEncode, Format);
    Inhalt.Text := eingabe;
    if length(pass) > 10 then begin
        j := 1;
        s := Inhalt.Text;
        for i := 0 to length(s) do begin
            j := i mod length(Hpass);
            n := Ord(Hpass[j]);
            n := n mod 31;
            s[i] := char(n Xor Ord(s[i]));
         end;

        Inhalt.Text := s;
        eingabe := s;
        PHash.Free;
    end
    else
        Inhalt.Text := 'Sie müssen ein Passwort mit mehr als 10 Zeichen eingeben';
        PHash.Free;
end;
könnte ja auch sein, dass es an meiner XOR methode liegt.
wäre über jede hilfe dankbar,
david

Ps: ich weiß, dass XOR so wie ich es hier benutze sehr unsicher ist, ist bis jetzt jedoch gewollt
david

dahead 21. Nov 2005 13:56

Re: Hash mit DEC: wie und welchen
 
also wenn du wirklich nur md5 brauchst, warum verwendest du nicht bpsw. diese Unit?

hier wird beschrieben wie das funktioniert.

wenn der hash immer gleich aussieht, darf ich fragen, wie er aussieht? vielleicht ist der string dauernd empty?

wo kriegst du exceptions?

Davidb 21. Nov 2005 16:17

Re: Hash mit DEC: wie und welchen
 
ich würde schon gerne das DEC verwenden, weil ich vielleicht auch noch andere verschlüsselungsfunktionen nutzten möchte, oder
zb den zufallsgenerator.
und das der string aus dem der hashwert erzeugt wird leer ist glaube ich nicht, weil die hashwerte schon unterschiedlich sind nur aber nur wenn ich das programm neustarte.
im moment wäre es mir auch wichtiger wenn mir jemand sagen könnte warum mein code dauernd acces violations ausgibt.
grüße, david

Sharky 21. Nov 2005 16:36

Re: Hash mit DEC: wie und welchen
 
Hai Davidb,
ich versuche mal deinen Code zu "beurteilen".

[quote="Davidb"]...
Delphi-Quellcode:
procedure TForm1.codierenClick(Sender: TObject);
    var
      PHash: THash_MD5;
      s: string;
      i: Integer;
      j: Integer;
      n: Integer;
      Hpass: string;
      Format: Integer;
begin
    Format :=fmtHEXL; // Was möchtest du mit "Format" machen? Wenn musst Du es deiner Instanz von THash zuweisen
    PHash := THash_MD5.create(nil); // So, hier erzeugst Du keine Instanz von THash.
    PHash.Init; // Init ist okay.
    Hpass := PHash.CodeString(pass, paEncode, Format); //Und jetzt? Du versuchst deiner Instanz einen Hashstring zu zuweisen.
    Inhalt.Text := eingabe; // Wo kommt den Inhalt her?
    if length(pass) > 10 then begin /pass ist hier auch nicht vorhanden
.
.
end;
Zitat:

könnte ja auch sein, dass es an meiner XOR methode liegt.
Warum denn jetzt XOR? Ich dachte Du möchtest die Hash-Funktionen des DEC von Hagen benutzen?

negaH 21. Nov 2005 16:47

Re: Hash mit DEC: wie und welchen
 
Schau mal in Hash.pas rein

Delphi-Quellcode:
    class function CalcString(const Data: String; Protection: TProtection; Format: Integer): String;
Wie du siehst eine Klassen Methode. Ich weis ein sehr unübliches Design aber ein kompaktes und einfaches. Denn so ist es richtig



Delphi-Quellcode:
Result := THash_MD5.CalcString(Value, nil, fmtHEX);
fertig und Gruß Hagen

Davidb 21. Nov 2005 17:13

Re: Hash mit DEC: wie und welchen
 
danke hagen das wars, jetzt funktioniert es alles wunderbar.

grüße,
david

dominikkv 10. Sep 2007 13:53

Re: Hash mit DEC: wie und welchen
 
hmm...hat sich hier etwas geändert?
Mein Delphi 2007 kennt kein fmtHex, außerdem sieht die deklaration nun so aus:
Delphi-Quellcode:
class function CalcFile(const FileName: String; Format: TDECFormatClass = nil; const Progress: IDECProgress = nil): Binary;

Die Muhkuh 10. Sep 2007 13:57

Re: Hash mit DEC: wie und welchen
 
Hi,

imho heißt es jetzt sowas wie TFormat_Hex.

dominikkv 10. Sep 2007 13:58

Re: Hash mit DEC: wie und welchen
 
Zitat:

Zitat von Die Muhkuh
Hi,

imho heißt es jetzt sowas wie TFormat_Hex.

das hab ich auch schon ausprobiert...
Zitat:

[DCC Fehler] ULastFM.pas(173): E2010 Inkompatible Typen: 'IDECProgress' und 'Class reference'

negaH 10. Sep 2007 16:15

Re: Hash mit DEC: wie und welchen
 
1.) http://www.michael-puff.de/Developer...agen_Reddmann/ neuste Version holen

2.)

Delphi-Quellcode:

ResultAsHEXString := THash_MD5.CalcBinary(DeinStringHier, TFormat_HEX);
In der neusten Version sind einige Veränderungen drinnen die dir die Arbeit erleichtern, schnelleren Code erzeugen, und weniger Resourcen verbrauchen sprich nicht unnötige Klassen mit in die EXE einlinken. Voraussetzung ist Delphi 5 oder höher.

Gruß Hagen

negaH 10. Sep 2007 16:24

Re: Hash mit DEC: wie und welchen
 
Per hand geht das dann so

Delphi-Quellcode:

with THash_MD5.Create do
try
  Init;
  Calc(DeinString[1], Length(DeinString));
  Calc(NochEinString[1], Length(NochEinString));
  Calc(IrgendEinInteger, SizeOf(IrgendEinInteger));
  Done;

  ResultAsHEXString := DigestStr(TFOrmat_HEX);
finally
  Free;
end;
Mit der von Hand Methode kannst du verschiedene Datenbereich nacheinander so hashen als wären die in einem Datenbereich linear sequentiell angeordnet.

Um ein Passwort auf sicherer Weise in einen Sessionkey umzuwandeln supporten die Hash Klassen eigene Methoden. Sowas macht man über KDF's = Key Derivation Functions und dafür gibt es sogar Standardverfahren.

Delphi-Quellcode:

var
  Salt: Binary;
begin
  Salt := RandomBinary(16);
 
  SessionKey := THash_MD5.KDFx(Password, Salt, 16, TFormat_Binary);
end;
Das wandelt das Password in einen 16 Byte langen binären Wert um der mit dem Zufalls-Salt und mehreren Runden an Hash-Berechnungen verknüpft wurde.
Die Methoden .KDF1(), .KDFx() gibts in 2 Versionen, und sie benötigen einen Zufalls-Salt.

Möchtest du ohne diesen Salt arbeiten, den du ja mit übertragen musst, dann sind es MGFs = Mask Generation Functions. Diese Methoden heisen dann .MGF1 und .MGFx().

Die x'er Versionen sind prohibitär von mir entwickelt und im Grunde besser als die Standard-Versionen .KDF2() und .MGF1(). Diese basieren auf dem IEEE Standard für Kryptographie. Schau dir in Unit DECHash.pas einfach deren Implentierungen an.


Gruß Hagen

dominikkv 11. Sep 2007 07:15

Re: Hash mit DEC: wie und welchen
 
habs jetzt so gemacht und geht:
Delphi-Quellcode:
result := THash_MD4.CalcFile(Source, TFormat_HEX);
und sry ich hab grad gesehen das es hier eigendlich um CalcString ging... :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 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