![]() |
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 ![]() ![]() Hat jemand für mich eine einfache Anleitung, wie man mit LockBox aus einem String einen Hashwert erzeugt? |
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:
oder
TLbMD5.HashString
Delphi-Quellcode:
gehhen.
TLbSHA1.HashString
|
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Danke für deine Antwort. Bislang hab ich mal folgenden Funktionsrumpf erstellt:
Delphi-Quellcode:
Wie geht's nun weiter?
// ----- 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; |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
.. der Hash liegt in LBH.HashOutputValue
Siehe auch: ![]() Grüße Klaus |
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 :( |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
.. dann vielleicht getDigest?
Delphi-Quellcode:
Grüße
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; Klaus |
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 ![]() |
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. |
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 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? |
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:
Damit hab ich einen Hash-String, den ich verwenden kann: Bei gleichem Ausgangsstring wird jetzt immer derselbe Hashwert erzeugt. Prima und danke :thumb:
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; |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Zitat:
![]() |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Oh, danke, Uwe, das ist sehr freundlich von dir :thumb:
Werde ich bestimmt noch brauchen können :stupid: |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Alternativ zu der Schleife mit Result := Result + ...
Delphi-Quellcode:
Function GetHashedString(Const Awort : String) : String;
Var LBH : TLbSHA1; LBD : TSHA1Digest; Begin Result := ''; LBH := TLbSHA1.Create(Nil); Try LBH.HashString(Awort); LBH.GetDigest(LBD); SetLength(Result, Length(LBH) * 2); BinToHex(LBH, PChar(Result), Length(LBH)); Finally LBH.Free; End; End; |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Es ist hoffentlich bei aller Euphorie klar, dass dieser Hashwert auf einem UTF-16 string basiert?
Also nicht wundern wenn dieser Hashwert z.B. mit einem von einem Webservice ermittelten verglichen wird und man etwas völlig anderes herausbekommt. mMn gehört zu so einer Funktion immer eine überladene dazu, wo man das Encoding angeben kann
Delphi-Quellcode:
function GetHashedString( const AWort : string ): string; overload;
function GetHashedString( const AWort : string; AEncoding : TEncoding ): string; overload; |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Procedure TFormLogin.Auswerten;
Var HPass,HUser : String; begin Case fLogMode Of 0 : Begin // Login HUser := GetHashedString(Ed_User.Text); HPass := GetHashedString(Ed_Pass1.Text); If DataModul.Q_Benutzer.Locate('BNAME;BPASS',VarArrayOf([HUser,HPass]),[]) Then ModalResult := mrOk Else Begin Fehlertext := 'Falsche Angaben! Programm wird beendet.'; ModalResult := mrClose; End; End; End; end; |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Das ist doch auch logisch.
Username und Passwort werden von Delphi erfasst (Edit) und damit UTF-16. Darauf werden dann die Hashwerte ermittelt und der Hexcodierte-Hashwert als string (UTF-16) an die Datenbank gegeben. Dabei erfolgt eine implizite Umwandlung von UTF-16 nach UTF-8 durch die Zugriffskomponente. |
AW: Mit LockBox10 für XE7 Hashstring erzeugen
Danke, das wußte ich in dieser Ausführlichkeit noch nicht. Damit ist dann für mich alles soweit im grünen Bereich und ich kann weitermachen. Nochmals Danke :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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