![]() |
AW: Passwortabfrage mit Datenbank abgleichen
Moin...:P
[mein Senf am Rande] ... man speichert keine Passwörter im Klartext in der Datenbank sondern nur dessen Hash z.B. Damit geht auch kein Klartext über die Leitung. :wink: [/mein Senf am Rande] |
AW: Passwortabfrage mit Datenbank abgleichen
Wie kann ich den Ein Passwort als Hash speichern? Und meinst Du mit "über die Leitung" das Internet bzw, Netzwerk? Weil Das Programm soll lediglich lokal auf einer Maschine verwendet werden.
Zitat:
MfG René |
AW: Passwortabfrage mit Datenbank abgleichen
Zitat:
Es ist eine Grundregel: vertraue keiner Webseite (oder Anwendung), die dein Passwort im Klartext speichert. Firmen, die es dennoch tun, werden zum Beispiel unter ![]() |
AW: Passwortabfrage mit Datenbank abgleichen
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...8-)
Zitat:
Zitat:
Delphi-Quellcode:
Beim Speichern des neuen Paßwortes erzeugst du auch den MD5, setzt die Paßwortvariable auf '' und speicherst den MD5 ab. Mit obiger Methode hast du im Programm keinen Vergleich der Paßwörter. Dieser läuft quasi schon in der Datenbank. Wenn du im Programm vergleichen willst dann nur die Hashes.
procedure TLogin.Login(aUserName, aPassword: string); // aPassword = Klartext direkt ohne Umwege aus dem Eingabeedit
var MD5Password: string; // Hash begin MD5Password := MD5DigestToStr(MD5String(aPassword)); aPassword := ''; // Pseudocode: // Query... frage die Datenbank ob es einen Benutzer(aUserName) mit dem MD5Passwort gibt. // !!! Werte immer als Parameter der Query mitgeben. // Hat die Query eine Antwort (Resultmenge = 1) ist der Benutzer gültig // fertsch... // Mach was mit dem User end; PS: Das ist eine einfache Variante aber ausreichend. Sicherer geht es immer... :wink: |
AW: Passwortabfrage mit Datenbank abgleichen
Erstmal möchte ich mich für deine Hilfe bedanken... und selbstverständlich auch bei allen anderen, denen ich noch nicht geantwortet habe... Aber leider hatte ich heute dafür keine Zeit, da ich den ganzen Tag auf einen blöden BOS Lehrgang bin. ...
Zitat:
Aber eine Frage noch vorweg, muss das LoginFenster in der der Unit DelphiMD5 eingebaut werden oder wird die "procedure TLogin.Login..." in meiner eigentlichen Login Unit (in meinem Fall die Unit 1) mit dem Befehl "uses DelphiMD5;" automatisch abgearbeitet? MfG und einen schönen rest Samstag René PS: Bitte denkt daran, ich bin erst seit ca. einer Woche mit dem Programmieren am Gange und zuvor hatte ich keinerlei Erfahrungen bzw. Kenntnisse im Bereich der Programmierung. Das einzige was ich bisher gemacht habe, ist die Homepage unseres Ortsvereins... |
AW: Passwortabfrage mit Datenbank abgleichen
Wenn von deiner Seite die entsprechende Initiative zurückkommt helfen wir gern...:thumb:
Zitat:
![]() |
AW: Passwortabfrage mit Datenbank abgleichen
Zitat:
MfG René |
AW: Passwortabfrage mit Datenbank abgleichen
Das Buch ist auch in Ordnung. Du solltest ein Verständnis für diverse Begrifflichkeiten und deren Verwendung haben. (Variablen, Konstanten, Prozeduren, Funktionen, Klasse, Instanz etc.)
Der Rest ist Übungssache und viel probieren. :thumb: |
AW: Passwortabfrage mit Datenbank abgleichen
Moin... :P
Dann schaun wir mal... Zitat:
Mit dem entsprechenden Vorwissen hättest du an meinem Beispielcode gesehen das mein Login eine Klasse ist. Für den Anfang geht das natürlich auch ohne. Du spendierst deinem Form eine private procedure namens Login oder ähnlich :wink:. In dieser Procedure bringst du dann die Logik, entsprechend dem Beispiel, unter. Hinweis: Wenn du mit Query statt Table arbeitest mußt du dich auch zwangsläufig mit SQL und Parametern beschäftigen. Das kann je nach verwendeten Komponenten eingeschränkt sein. Wie du siehst ist das nicht mal eben programmiert wenn das Basiswissen fehlt. Programmieren ist ein ständiger Lernprozess bei dem man klein anfangen und sich ständig weiterentwickeln muß. Um die Motivation nicht zu verlieren braucht man auch Erfolgserlebnisse. Die kannst du aber knicken wenn du deine Ziele zu hoch ansetzt. Dann lieber Step by Step... :thumb: Hänge mal deinen kompletten Code hier an. Da sehen wir mal wo es Nachholebedarf gibt. :zwinker: |
AW: Passwortabfrage mit Datenbank abgleichen
Erstmal Danke... Ich habe versuch deinen Code einzubinden, aber dann kommen lauter Fehlermeldungen:
Projekt kompilieren, Ziel: DRK: Exit code 256, Fehler: 1 DelphiMD5.pas(17,6) Fatal: Kann Windows nicht finden verwendet von DelphiMD5 des Projektinspektors. Projekt kompilieren, Ziel: DRK: Exit code 256, Fehler: 20, Hinweise: 5 DelphiMD5.pas(234,30) Error: Operator is not overloaded: "TUINT4Array" and "Byte" DelphiMD5.pas(235,33) Error: Operator is not overloaded: "TUINT4Array" shr "ShortInt" DelphiMD5.pas(236,33) Error: Operator is not overloaded: "TUINT4Array" shr "ShortInt" DelphiMD5.pas(237,33) Error: Operator is not overloaded: "TUINT4Array" shr "ShortInt" DelphiMD5.pas(258,16) Error: Illegal type conversion: "TByteArray" to "LongWord" DelphiMD5.pas(258,36) Error: Illegal type conversion: "TByteArray" to "LongWord" DelphiMD5.pas(259,5) Error: Illegal type conversion: "TByteArray" to "LongWord" DelphiMD5.pas(259,36) Error: Illegal type conversion: "TByteArray" to "LongWord" DelphiMD5.pas(288,10) Error: Incompatible types: got "TArray4UINT4" expected "LongWord" DelphiMD5.pas(288,23) Error: Incompatible types: got "TArray4UINT4" expected "LongWord" DelphiMD5.pas(288,36) Error: Incompatible types: got "TArray4UINT4" expected "LongWord" DelphiMD5.pas(288,49) Error: Incompatible types: got "TArray4UINT4" expected "LongWord" DelphiMD5.pas(360,2) Error: Operator is not overloaded: inc "TArray4UINT4" DelphiMD5.pas(360,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4" DelphiMD5.pas(361,2) Error: Operator is not overloaded: inc "TArray4UINT4" DelphiMD5.pas(361,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4" DelphiMD5.pas(362,2) Error: Operator is not overloaded: inc "TArray4UINT4" DelphiMD5.pas(362,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4" DelphiMD5.pas(363,2) Error: Operator is not overloaded: inc "TArray4UINT4" DelphiMD5.pas(363,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4" DelphiMD5.pas(461,17) Hint: Local variable "Context" does not seem to be initialized DelphiMD5.pas(468,33) Hint: Local variable "Buffer" does not seem to be initialized DelphiMD5.pas(475,17) Hint: Function result variable does not seem to be initialized DelphiMD5.pas(482,17) Hint: Local variable "Context" does not seem to be initialized DelphiMD5.pas(484,17) Hint: Function result variable does not seem to be initialized Ach ja ich hatte in einen Post zuvor erwähnt, dass ich Lazarus verwende und nicht Delphi, für den Fall, dass dies noch nicht bekannt sein sollte und dies den Fehler verursachen sollte. Zudem Schreibe ich das Programm primär unter Linux und anschließend kompiliere ich es noch unter Mac und Windows 10. ...:pale: Zitat:
Code:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, sqldb, db, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons, Menus; type { TForm1 } TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; CheckBox1: TCheckBox; Image1: TImage; Benutzer: TLabeledEdit; Code: TLabeledEdit; MainMenu1: TMainMenu; MenuItem1: TMenuItem; MenuItem2: TMenuItem; StatusBar1: TStatusBar; Timer1: TTimer; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure CheckBox1Change(Sender: TObject); procedure CodeChange(Sender: TObject); procedure CodeKeyPress(Sender: TObject; var Key: char); procedure MenuItem2Click(Sender: TObject); procedure MenuItem4Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation uses Unit2, Unit3, Unit4; {$R *.lfm} { TForm1 } //Anzeige DATUM und Uhrzeit in der Statusleiste procedure TForm1.Timer1Timer(Sender: TObject); var hr, min, sec, msec: Word; begin DecodeTime(now, hr, min, sec, msec); StatusBar1.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now); Form2.StatusBar2.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now); Form3.StatusBar1.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now); Form4.StatusBar1.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now); end; //Abbruch des Logins und schlie√üen des Programms procedure TForm1.BitBtn2Click(Sender: TObject); begin form2.close; end; // Passworteingabe durch Sternchen ersetzten procedure TForm1.CodeChange(Sender: TObject); begin Code.PasswordChar := '*'; end; //Passworteingabe durch Sternchen deaktivieren procedure TForm1.CheckBox1Change(Sender: TObject); begin if CheckBox1.Checked then begin Code.PasswordChar := #0; end else begin Code.PasswordChar := '*'; end end; //Mit Enter den LoginButton aktivieren procedure TForm1.CodeKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin BitBtn1.Click; // or something else Key := #0; end; end; //LoginButton = true Weiterleitung zum MainForm und schlie√üen LoginFenster procedure TForm1.BitBtn1Click(Sender: TObject); begin form3.dbf1.Filtered := false; form3.dbf1.Filter := Format('Ben = %s and Code = %s',[QuotedStr(Benutzer.text),QuotedStr(Code.Text)]); form3.dbf1.Filtered := true; form3.dbf1.First; if not form3.dbf1.EoF then begin form2.show; form1.close; end; form3.dbf1.Filtered := false; end; //Beenden des Programms durch das Mainmenü procedure TForm1.MenuItem2Click(Sender: TObject); begin form2.close; end; procedure TForm1.MenuItem4Click(Sender: TObject); begin form3.showmodal; end; end. Nochmals vielen Dank für die umfangreiche Hilfe, das ist nicht selbstverständlich und vor allem wird es in vielen Foren immer seltener... Gruß René |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 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