Oder weist Du die Ergebnisse bc.HashPassword einem string zu?
mystr := bc.HashPassword(Password, guid.D4, 12);
Da die Deklaration so aussieht
Delphi-Quellcode:
//If you want to handle the cost, salt, and encoding yourself, you can do that.
class function HashPassword(
const password: UnicodeString;
const salt:
array of Byte;
const cost: Integer): TBytes;
overload;
erhälts Du ein Ergebnis vom Typ TBytes, was manche Fehlermeldungen erklären würde.
Oh mann.
Das war es. Der Rückgabetyp dieser Funktion ist ein anderer. Manchmal sieht man den Wald vor lauter Bäuimen nicht. Die Frage ist nur, warum die Funktion einen anderen Rückgabetyp hat.
So funktioniert es jetzt.
Delphi-Quellcode:
function HashPassword(
const Password:
string):
string;
var
bc: TBCrypt;
guid: TGUID;
tb: TBytes;
begin
Result := EmptyStr;
bc := TBCrypt.Create;
try
guid := TGUID.Create;
tb := bc.HashPassword(Password,
guid.ToByteArray, 12);
Result := TEncoding.Unicode.GetString(tb);
finally
bc.Free;
end;
end;
EDIT: Etwas zu früh gefreut. Die Zeile
Result := TEncoding.Unicode.GetString(tb);
macht noch ein paar Probleme. Da kommt im Moment nur Müll raus.
Wie kann ich TBytes in String umwandeln, sodass nochmal ein Hash rauskommt?