Bei der Anmeldung an der Fritzbox wird ein Response benötigt, für welchen die Challenge mit dem Password zu einem UTF16LE formatierten String und der daraus resultierende MD5Hash wiederum mit der Challenge verbunden wird:
aResponse := FSession.Challenge + '-' + MD5Hash(AnsiToUtf16(Format('%s-%s', [FSession.Challenge, FPassword])));
Die Function
Delphi-Quellcode:
function AnsiToUtf16(const aStr: AnsiString): WideString;
var
len : integer;
codePage : Word;
begin
codePage := CP_ACP;
len := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@aStr[1]), - 1, nil, 0);
SetLength(Result, len - 1);
if len > 1
then MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@aStr[1]), - 1, PWideChar(@Result[1]), len - 1);
end;
liefert wohl ein UTF16BE, aber kein UTF16LE. Der Versuch, jedes Char mit einem #0 zu ergänzen, hat nicht funktioniert.
Gibt es eine Lösung ohne auf ein neues Delphi updaten zu müssen?