AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehler bei Übergabe eines Salts an BCrypt
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei Übergabe eines Salts an BCrypt

Ein Thema von Aviator · begonnen am 18. Okt 2016 · letzter Beitrag vom 18. Okt 2016
 
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#1

Fehler bei Übergabe eines Salts an BCrypt

  Alt 18. Okt 2016, 12:31
Hallo zusammen,

ich komme mir schon fast blöd vor eine solche Frage hier stellen zu müssen, aber irgendwie will es nicht funktionieren.

Ich habe mir die BCrypt Unit von Jose Jimeniz besorgt und möchte damit meine Passwörter, die in der Datenbank gespeichert, hashen. BCrypt erzeugt ja automatisch einen Salt, wenn keiner mitgegeben wird. Zumindest macht es diese Unit so.

Wenn ich aber keinen Salt mitgebe, dann erhalte ich ja immer wieder einen anderen Hash. Es gibt zwar die Funktion CheckPassword() die den Salt aus dem Hash herausliest, aber ich habe an dieser Stelle den in der Datenbank gespeicherte Hash nicht zur Verfügung (bzw. möchte ihn nicht haben). Ich will das Passwort durch die Datenbank prüfen lassen.

Also dachte ich mir, dass ich mir einen benuterabhängigen Salt ausdenke und diesem an die HashPassword() Funktion übergebe. Allerdings erhalte ich dann je nachdem welche Art ich ausprobiere folgende Compilermeldungen:

Versucht habe ich folgendes:
Delphi-Quellcode:
bc.HashPassword(Password, 'Test', 12); // [dcc32 Fehler] E2250 Es gibt keine überladene Version von 'HashPassword', die man mit diesen Argumenten aufrufen kann

bc.HashPassword(Password, guid.ToByteArray, 12); // [dcc32 Fehler] E2010 Inkompatible Typen: 'string' und 'System.TArray<System.Byte>'

bc.HashPassword(Password, guid.D4, 12); // [dcc32 Fehler] E2010 Inkompatible Typen: 'string' und 'System.TArray<System.Byte>'
Die Funktion HashPassword gibt es in 3 Varianten als Überladung:

Delphi-Quellcode:
class function HashPassword(const password: UnicodeString): string; overload;
class function HashPassword(const password: UnicodeString; cost: Integer): string; overload;
class function HashPassword(const password: UnicodeString; const salt: array of Byte; const cost: Integer): TBytes; overload;

class function CheckPassword(const password: UnicodeString; const expectedHashString: string): Boolean; overload;
Der Salt Parameter ist hier als array of Byte angegeben. Allerdings habe ich keine Ahnung, was ich dorthin übergeben kann, damit ich eine solche Fehlermeldung nicht erhalte. Finde auch nirgends ein Beispiel, in dem jemand mal diese Überladung genutzt hat.

Ich denke ja mal, dass das die einzige Möglichkeit ist, immer den gleichen Hash zu erhalten, wenn ich den Salt übergebe.

Ich hoffe mir kann jemand bei meinem Problem helfen. Ziel wäre es, eine GUID als Salt zu übergeben.

Bin für jeden Tipp dankbar. Oder geht das irgendwie auch anders? Der Hash soll verglichen werden und der Benutzer darf weitermachen, wenn beide Hashes identisch sind.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz