Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Ansistring zu Unicodestring (UTF16LE)

  Alt 11. Feb 2011, 06:34
Obwohl
Delphi-Quellcode:
function Chr ( IntValue : Integer ) : AnsiChar;
function Chr ( IntValue : Integer ) : WideChar;
sein soll, bekomme ich in Turbo Delphi bei
Delphi-Quellcode:
for i := 1 to Length(S) do
  S[i] := Chr((Ord(S[i]) shl 8) or (Ord(S[i]) shr 8));
die Meldung
Code:
[Pascal Fehler]E2010 Inkompatible Typen: 'WideChar' und 'Char'
Nachtrag: Mit WideChar anstelle Chr geht es. Aber das Passwort ist dann immernoch ungültig.
___

Die Codepage bezieht sich auf den Ausgangsstring und so bekomme ich bei 1200 und 1201 eine Länge von 0.
___

In der D2010-Komponente, welche ich zu Hilfe genommen habe, wird String verwendet und bei der Ermittlung des MD5 Hash wird in der unit DCPcrypt2 UpdateStr aufgerufen, welche so deklariert ist:
Delphi-Quellcode:
    procedure UpdateStr(const Str: AnsiString); {$IFDEF UNICODE}overload; {$ENDIF}
      { Update the hash buffer with the string }
{$IFDEF UNICODE}
    procedure UpdateStr(const Str: UnicodeString); overload;
      { Update the hash buffer with the string }
{$ENDIF}
Bedeutet dann wohl, dass Unicodestring UTF16LE sein müsste.
___

PS: Wie du das mit dem um eine #0 ergänzen gemeint hast, hab ich nicht richtig verstanden. (bzw, ich glaub ich weiß was du meinst, aber nicht das wie, so daß es dann komischer Weise nicht ging)
So etwas:
Delphi-Quellcode:
Result := '';
for i := 1 to Length(aStr)
do Result := Result + aStr[i] + #0;
___

Nachtrag: Danach scheint ein Unicodesting tatsächlich LE zu sein.
___

Das ist die Beschreibung in der AVM Technical Note:
Zitat:
Ermittlung des Response-Wertes
Beim neuen Login-Verfahren wird also das Klartextpasswort
login:command/password=<klartextpassword>
ersetzt durch
login:command/response=<response>
Der Response-Wert wird wie folgt gebildet:
<response> = <challenge>-<md5>
Der Wert <challenge> kann aus der Datei login_sid.xml ausgelesen werden
und <md5> ist der MD5 (32 Hexzeichen mit Kleinbuchstaben) von
<challenge>-<klartextpassword>
Der MD5-Hash wird über die Bytefolge der UTF-16LE-Codierung dieses Strings gebildet (ohne BOM und
ohne abschließende 0-Bytes).
Aus Kompatibilitätsgründen muss für jedes Zeichen, dessen Unicode Codepoint > 255 ist, die Codierung
des "."-Zeichens benutzt werden (0x2e 0x00 in UTF-16LE). Dies betrit also alle Zeichen, die nicht in
ISO-8859-1 dargestellt werden können, z. B. das Euro-Zeichen.
Abschließend ein Beispiel mit deutschem Umlaut:
Die Challenge
<challenge> = "1234567z"
kombiniert mit dem Kennwort
<klartextpassword> = "äbc"
ergibt den Wert
<response> = "1234567z-9e224a41eeefa284df7bb0f26c2913e2"
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof

Geändert von Garfield (11. Feb 2011 um 07:02 Uhr)
  Mit Zitat antworten Zitat