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
Antwort Antwort
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Fehler bei Übergabe eines Salts an BCrypt

  Alt 18. Okt 2016, 14:25
Hallo zusammen,

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

class function HashPassword(const password: UnicodeString; cost: Integer): string; overload;
Naja, wenn die Funktion so aussieht:
class function HashPassword(const password: UnicodeString; cost: Integer): string; overload; dann ist dein Aufruf falsch. Korrekt wäre:
Delphi-Quellcode:
..
  hash := bc.HashPassword('test', 123);
..
selbes gilt für deine anderen Aufrufe. Ich weiß nicht was das Password vorder bei machen soll?

Kurze Zwischenfrage: Muss es genau diese Funktion sein?
Was spricht gegen THashBobJenkins.GetHashvalue aus der System.Hash?

Und wenns mit Salt sein soll kann man sich ja eine kleine eigene Routine machen

zB (ungetestet)
Delphi-Quellcode:
function GibMirHash(const AData: String; const ASalt: Integer): Integer;
begin
  Result := THashBobJenkins.GetHashValue(PChar(AData)^, AData.Length * SizeOf(Char), ASalt);
end;
hoffe damit ist dir geholfen
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Fehler bei Übergabe eines Salts an BCrypt

  Alt 18. Okt 2016, 14:33
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.
  Mit Zitat antworten Zitat
Aviator

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

AW: Fehler bei Übergabe eines Salts an BCrypt

  Alt 18. Okt 2016, 15:12
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?

Geändert von Aviator (18. Okt 2016 um 15:17 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.011 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Fehler bei Übergabe eines Salts an BCrypt

  Alt 18. Okt 2016, 15:37
Was spricht gegen THashBobJenkins.GetHashvalue aus der System.Hash?
Das ist eine interessante Frage. Ich habe BobJenkinsHash auch mal als Antwort auf die Frage "How do I hash a string with Delphi?" vorgeschlagen. Da erhielt ich den Kommentar, Bob Jenkins sei keine kryptografische Hash-Funktion.

Es ist auch nachvollziehbar: für einen schwer zu knackenden Hash-Wert muss der Aufwand hoch sein, und für einen Hash-Wert der nur für ein TDictionary benutzt wird soll das Hashen schnell gehen. Unterschiedliche Anforderungen.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Aviator

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

AW: Fehler bei Übergabe eines Salts an BCrypt

  Alt 18. Okt 2016, 15:49
Hmm. Keine Ahnung was dagegen spricht. Ich habe mir BCrypt jetzt ausgesucht.

Ich wollte eben einen Hash Algorithmus haben, der mir immer einen String der gleichen Länge zurückgibt und der auch sicher ist. MD5 sollte man ja nicht mehr verwenden wegen der möglichen Kollisionen.

Dieser THashBobJenkins gibt ja wie ich das sehen nur einen Integer Wert aus. Irgendwie habe ich da so die Befürchtung, dass der relativ einfach zu knacken wäre.

Welche Alternativen zu BCrypt und THashBobJenkins würde es denn noch geben für die eine entsprechende Klasse bereits existiert?

Am liebsten wäre es mir allerdings, wenn ich den BCrypt Algorithmus so zum Laufen bekommen würde.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz