Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Mit LockBox10 für XE7 Hashstring erzeugen (https://www.delphipraxis.net/184061-mit-lockbox10-fuer-xe7-hashstring-erzeugen.html)

Perlsau 23. Feb 2015 09:19

Mit LockBox10 für XE7 Hashstring erzeugen
 
Moin allerseits,

ich muß für einen hiesigen Programmierer herausfinden, wie man einen Hash von einem String erzeugt. Er möchte dazu Lockbox verwenden, weil das bei Bedarf auch für IOS verfügbar sei. Nun habe ich in seiner XE7-IDE diese Version installiert, finde aber nirgendwo ein Manual oder sonstige Hinweise, wie die einzelnen Komponenten zu verwenden sind. Beispiele sind offenbar auch keine dabei. Leider kenne ich mich nur mit der DCPcrypt Cryptographic Component Library aus, die will mein Kunde jedoch nicht einsetzen.

Hat jemand für mich eine einfache Anleitung, wie man mit LockBox aus einem String einen Hashwert erzeugt?

Union 23. Feb 2015 09:42

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
Dazu müsste erst einmal die Entscheidung getroffen werden, welcher Algorithmus verwendet werden soll. Dann sollte das mit
Delphi-Quellcode:
TLbMD5.HashString
oder
Delphi-Quellcode:
TLbSHA1.HashString
gehhen.

Perlsau 23. Feb 2015 09:47

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
Danke für deine Antwort. Bislang hab ich mal folgenden Funktionsrumpf erstellt:
Delphi-Quellcode:
// ----- Liefert den Hashwert des übergebenen Strings zurück ---------------------------------------------------------------------
Function GetHashedString(Const Awort : String) : String;
Var
  LBH : TLbSHA1;

Begin
  LBH := TLbSHA1.Create(Nil);
  Try
    LBH.HashString(Awort);
    Result := '???';
  Finally
    LBH.Free;
  End;
End;
Wie geht's nun weiter?

Klaus01 23. Feb 2015 09:51

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
.. der Hash liegt in LBH.HashOutputValue
Siehe auch: http://codeverge.com/embarcadero.del...-fails/1070398

Grüße
Klaus

Perlsau 23. Feb 2015 09:57

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das mag vielleicht für LockBox3 zutreffen, in LockBox10 (der Version für XE7, die auch mit IOS und Android kompatibel ist), gibt es dieses Property leider nicht. Könnte der berechnete Hash vielleicht im HashBuffer liegen?

Übrigens hab ich einige Stunden lang all diese Hinweise, die Google liefert, bereits erfolglos abgegrast, bevor ich hier anfragte :(

Klaus01 23. Feb 2015 10:07

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
.. dann vielleicht getDigest?

Delphi-Quellcode:
 TLbSHA1 = class(TLbHash)
  strict private
    FDigest : TSHA1Digest;
  public
    procedure GetDigest(var Digest : TSHA1Digest);

    procedure HashBuffer(const Buf; BufSize : Cardinal); override;
    procedure HashFile(const AFileName: string); override;
    procedure HashStream(AStream: TStream); override;
    procedure HashString(const AStr: string); override;
  end;
Grüße
Klaus

Perlsau 23. Feb 2015 10:21

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
... oder vielleicht auch nicht?

TSHA1Digest ist ein Array[0..19] of byte. Wenn dort der Hashstring drin wäre, dann könnte der ja immer nur höchstens 20 Zeichen lang sein. Das erscheint mir fragwürdig. Soweit ich weiß, sind Hash-Strings gewöhnlich um einiges länger. Und wie sollte man aus diesem Array dann einen Hash-String erzeugen?

Hat denn wirklich noch niemand mit LockBox10 gearbeitet?

Daniel 23. Feb 2015 10:30

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
Darüber bin ich kürzlich auch gestolpert.
Das, was wir im Allgemeinen als SHA1-Hash zu lesen bekommen, ist die hexcodierte Variante dieser 20 Bytes. Wenn Du Dein Byte-Buffer in Hex (z.B. IntToHex()) wandelst, sollte etwas herauskommen, das dem Auge vertraut ist.

Sir Rufo 23. Feb 2015 10:36

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
Wenn man weiß, was ein Hashwert ist und woraus ein Hashwert ausschließlich gebildet werden kann, dann ist alles viel klarer:
Zitat:

Ein Hashwert wird ausschließlich aus Bytefolgen erzeugt und der Hashwert selber ist auch eine Bytefolge.
Was man dann aus dieser Bytefolge macht (Malen nach Zahlen, in einen HexString umwandeln, ...) ist dann reine Präsentation der Bytefolge. Nicht mehr, nicht weniger.

Ein Hauptgrund, warum die meisten beim Hashen auf die Nase fallen "Delphi-PHP", "Delphi-C#", .... liegt daran, dass man beim Hashen das Encoding (String -> Bytefolge) mal nicht beachtet und Delphi nimmt dann UTF-16 und der Rest (meistens) UTF-8 => Zonk.

Über diese Dinge sollte man sich im Klaren sein ... dann klappt es auch mit dem Hashen.

Also, was für eine Hashwert-String-Repräsentation soll den rauskommen?

Perlsau 23. Feb 2015 10:55

AW: Mit LockBox10 für XE7 Hashstring erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Daniel & @SirRufo & @Klaus01
Okay, das war's dann wohl :thumb:
Delphi-Quellcode:
Function GetHashedString(Const Awort : String) : String;
Var
  LBH : TLbSHA1;
  LBD : TSHA1Digest;
  i   : Integer;
Begin
  Result := '';
  LBH   := TLbSHA1.Create(Nil);

  Try
    LBH.HashString(Awort);
    LBH.GetDigest(LBD);
    For i := 0 To 19 Do
      Result := Result + IntToHex(LBD[i],2);
  Finally
    LBH.Free;
  End;
End;
Damit hab ich einen Hash-String, den ich verwenden kann: Bei gleichem Ausgangsstring wird jetzt immer derselbe Hashwert erzeugt. Prima und danke :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz