Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Passwortverschlüsselung PBKDF2 (https://www.delphipraxis.net/174176-passwortverschluesselung-pbkdf2.html)

claudine99 8. Apr 2013 13:30

Passwortverschlüsselung PBKDF2
 
Hallo,
in einem Programm (Delphi 2009) soll eine Userverwaltung implementiert werden, bei der die Passwörter PBKDF2, mindestens jedoch SHA1 verschlüsselt an eine MS SQL Datenbank übergeben werden sollen.
Hat jemand dazu vielleicht eine Idee? Gibt es dafür in Delhi eine extra Klasse?

VG

Bernhard Geyer 8. Apr 2013 13:33

AW: Passwortverschlüsselung PBKDF2
 
Wie wäre es wenn du nur die gesalzene Hashes an die DB überträgst?

BUG 8. Apr 2013 14:01

AW: Passwortverschlüsselung PBKDF2
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1210584)
Wie wäre es wenn du nur die gesalzene Hashes an die DB überträgst?

Hashen ist nicht genug. Hier sogar was mit "Experiment" und anderen Referenzen.

Mit bcrypt oder PBKDF2 bist du auf dem richtigen Weg. Es scheint sogar eine Delphi-Implementation für bcrypt zu geben.

Bernhard Geyer 8. Apr 2013 14:08

AW: Passwortverschlüsselung PBKDF2
 
Zitat:

Zitat von BUG (Beitrag 1210594)
Hashen ist nicht genug.

Na ja PBKDF2 ist ja hashen + Salt.

Mir ging es ja eher um den Teil:

Zitat:

mindestens jedoch SHA1 verschlüsselt ...

sx2008 8. Apr 2013 14:19

AW: Passwortverschlüsselung PBKDF2
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Unit enthält MD4, MD5 und Sha1.

claudine99 9. Apr 2013 11:49

AW: Passwortverschlüsselung PBKDF2
 
sorry für das späte Feedback...
da ich noch nie etwas mit Verschlüsselung zu tun hatte, ist das gerade etwas verwirrend für mich :shock:

Ich in einer 'Unit_User' ein Editfeld 'edt_1_password'. In dieses kann der admin ein PW eingeben. Dieses soll verschlüsselt in der DB Tbl_User, column PW gespeichert werden.

im Moment sieht es unverschlüsselt so aus:

Delphi-Quellcode:
procedure TForm_new_user.SpeedButton1Click(Sender: TObject);
var
 cFirstname, cLastname, cUsername, cSQL: String;
 cPassword, cEdit: String;
begin
  cFirstname := Trim(edt_1_firstname.Text);
  cLastname := Trim(edt_1_lastname.Text);
  cUsername := Trim(edt_1_username.Text);
  cPassword := (Trim(edt_1_password.Text));


    // INSERT, wenn nötig (fragen ob schon ein Satz)

     cSQL := 'SELECT * FROM dbo.tbl_User WHERE Username = ' + CH + cUsername + CH + ' ' +
             ' AND [Lastname] = ' + CH + cLastname + CH + '';


    DM.Query1.Close;
    DM.Query1.SQL.Text := cSQL;
    DM.Query1.Open;
    if DM.Query1.RecordCount = 0 then
    begin
      // kein satz da --> INSERT
      cSQL := 'INSERT INTO dbo.tbl_User ' +
              '([Firstname], [Lastname], [Username], [Password], [Ins_Date],[Ins_User]) VALUES' +
              '( ' + CH +  cFirstname + CH + ', ' +
              CH + cLastname + CH + ', ' +
              CH + cUsername + CH + ', ' +
              CH + cPassword + CH + ', ' +
              CH + FormatDateTime('mm-dd-yyyy', now) + CH + ', ' +
              CH + Form1.cuUsername + CH + ' ' +
               ' )';


      DM.Query1.Close;
      Application.ProcessMessages;
    end
    else
    begin
      Showmessage('Username already exists!')
    end;

    DM.Query1.Close;


end;
Loggt sich der User nun mit Username und PW (edt_Passwort) und Klick auf 'Login' ein, müsste doch nur das verschlüsselte PW abgefragt werden.
Wäre super, wenn mich hier jemand 'erhellen' könnte....

BUG 9. Apr 2013 12:41

AW: Passwortverschlüsselung PBKDF2
 
Zitat:

Zitat von claudine99 (Beitrag 1210775)
da ich noch nie etwas mit Verschlüsselung zu tun hatte, ist das gerade etwas verwirrend für mich :shock:

Da du immer wieder "Verschlüsselung" sagst:
Passwörter werden in der Regel nicht verschlüsselt, sondern gehasht. Praktisch bedeutet dies, das die Passwörter nicht wieder "entschlüsselt" werden können.

Trotzdem können solche Passwörter mit etwas Aufwand wiedererstellt werden, in dem man wahrscheinliche/übliche Passworte hasht und mit den gespeicherten Hashes verglichen werden (Stichwort: Wörterbuchattacke). bcrypt und PBKDF2 dienen dazu, das "Hashen" so zu verlangsamen, dass sich diese Attacke nicht mehr lohnt.

claudine99 9. Apr 2013 13:05

AW: Passwortverschlüsselung PBKDF2
 
Gut, schon dazu gelernt, dann also 'gehsht'. Eine Entschlüsselung braue ich ja nicht, da beim Erstellen/Speichern und beim Login das eingegebene PW beim Senden zur DB auch gehasht werden kann.

claudine99 9. Apr 2013 13:10

AW: Passwortverschlüsselung PBKDF2
 
Zitat:

Zitat von BUG (Beitrag 1210594)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1210584)
Wie wäre es wenn du nur die gesalzene Hashes an die DB überträgst?

Hashen ist nicht genug. Hier sogar was mit "Experiment" und anderen Referenzen.

Mit bcrypt oder PBKDF2 bist du auf dem richtigen Weg. Es scheint sogar eine Delphi-Implementation für bcrypt zu geben.

wenn ich bcrypt verwende, sprich
cPassword: String;
begin
cPassword := TBCrypt.HashPassword(Trim(edt_1_password.Text));
könnte das funktionieren und was habe ich dann zusätzlich bei 'uses' einzufügen?

Sorry, aber wie gesagt, das Thema ist Neuland für mich...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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