Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Bekanntes Problem MD5 und Unicode
Cyberaxx - Mi 21.12.11 00:37
Titel: Bekanntes Problem MD5 und Unicode
Hallo
Mittlerweile bin ich seit einer ganzen weile am Suchen, hier, DP, Google aber wirklich fündig bin ich nicht geworden.
Ich suche eine funktionierende Version um einen MD5 Hash zu erzeugen unter Delphi 2010 und das ohne eine ganze Tool Sammlung zu installieren.
Sämtliche Anpassungen an den bekannten MP5.pas sind leider fehlgeschlagen sie stimmen einfach nicht mit der von MYSQL überein.
Hat hier vllt. jemand eine Lösung ohne eben eine ganze Sammlung zu installieren?
MfG Cyber
jaenicke - Mi 21.12.11 00:49
Wie wäre es mit Indy (TIdHashMessageDigest5 aus IdHashMessageDigest)? Das ist schließlich schon mit Delphi mitgeliefert und sollte daher am einfachsten sein. ;-)
Cyberaxx - Mi 21.12.11 08:38
In all den Stunden die ich gesucht habe, ist niemand auf die Idee gekommen an gegebenfalls mal an die Indies zu denken.
Es kam mal auf das ich glaube etwas von Fundamentals glaube ich. So viel wollte ich natürlich nicht installieren.
Die md5.pas war halt recht einfach gehalten.
Ich werde mir nachher mal die Unit von den Indies anschauen. Danke erstmal.
Gausi - Mi 21.12.11 08:55
Die Unit, die ich dafür mal hier im Forum gefunden habe, führte sämtliche Berechnungen auf eine Funktion zurück, die als Parameter nur einen Pointer und eine Länge erwartet hat. Diese Unit konnte man dann einfach so Unicodefähig machen:
Delphi-Quelltext
1: 2: 3: 4:
| function MD5UnicodeString(const S: UnicodeString): TMD5Digest; begin Result := MD5Buffer(PWideChar(S)^, Length(S) * sizeOf(WideChar)); end; |
Und wenn das nicht mit dem Hash von MYSQL übereinstimmt, dann könnte man sowas probieren:
Delphi-Quelltext
1: 2: 3: 4:
| function MD5UTF8String(const S: UTF8String): TMD5Digest; begin Result := MD5Buffer(PAnsiChar(S)^, Length(S)); end; |
Cyberaxx - Mi 21.12.11 09:13
:)
Hast denn die Unit noch? Sitze gerade auf der Arbeit und habe kein Delphi vor mir.
Habe halt bei meiner auch schon einiges versucht anzupassen nachdem was ich so gelesen hatte.
Letzteres war dann, das ich eine andere md5.pas genommen habe aber die schon beim kompilieren Probleme machte.
Cyberaxx - Mi 21.12.11 20:18
Es funktioniert :)
Warum ist der MD5 String eigentlich uppercase? Ich mein wenn ich mir dagegen die MD5 von MySQL anschaue ist dort alles Lowercase
jaenicke - Mi 21.12.11 21:31
Das ist vollkommen egal, da es sich um hexadezimale Ziffern handelt. ;-)
Cyberaxx - Mi 21.12.11 21:35
Ja und Nein
Wenn ich
Delphi-Quelltext
1: 2: 3: 4: 5:
| Format('SELECT * FROM users WHERE username = %s', [UserName]); ... if MD5String(Passwort) = DataSource.DataSet.FieldByName('password').AsString then begin ... end; |
versuche gehts natürlich in die Hose. Auch wen ndas nun kein schönes Beispiel ist, so ist es ja nunmal so.
Hab nun einfach nen lowerCase davor gesetzt und meine Welt ist wieder in Ordnung :)
jaenicke - Do 22.12.11 00:05
Wie wäre es zum Vergleich mit AnsiSameText? :zwinker:
Cyberaxx - Do 22.12.11 18:40
Da gefällt mir LowerCase aber doch schon besser :)
Delphi-Quelltext
1:
| AnsiSameText(Str1, Str2) = |
<>
Boldar - Fr 23.12.11 02:21
Cyberaxx hat folgendes geschrieben : |
Delphi-Quelltext 1:
| AnsiSameText(Str1, Str2) = |
<>
|
Hat ja auch niemand behauptet... :gruebel:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!