![]() |
Delphi-Version: 7
Fehler beim Passwortstärkeberechnung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich lasse wie folgt die Passwortstärke berechnen.
Delphi-Quellcode:
procedure TForm1.PassStrength();
var a, b, c, d, e, f, summezeichen, potenz, jahre: Float; begin if UppercaseCB.Checked then a := 26 else a := 0; if LowercaseCB.Checked then b := 26 else b := 0; if DigitsCB.Checked then c := 10 else c := 0; if ArithmoperatorsCB.Checked then d := 5 else d := 0; if BracketCB.Checked then e := 8 else e := 0; if SpecialcharsCB.Checked then f := 19 else f := 0; summezeichen := (a + b + c + d + e + f); potenz := Power(summezeichen, vPasslength); jahre := ((potenz / 2096204400) / 31536000) / 1000; PassStrengthLabel.Left := (Shape1.Width - PassStrengthLabel.Width) div 2; if Round(jahre) <= 10 then begin Shape1.Brush.Color := clRed; PassStrengthLabel.Caption := FloatToStr(Round(jahre)) + ' ' + 'Schwach'; end else if (Round(jahre) >= 11) and (Round(jahre) <= 70) then begin Shape1.Brush.Color := clYellow; PassStrengthLabel.Caption := FloatToStr(Round(jahre)) + ' ' + 'Gut'; end else begin Shape1.Brush.Color := clGreen; PassStrengthLabel.Caption := FloatToStr(Round(jahre)) + ' ' + 'Sehr gut'; end; end; Das funktioniert soweit gut, aber ab und zu bekomme ich diese Fehlermeldung, siehe Screenshot. Ich verstehe schon, dass es irgendwie mit zu großen Zahlen zu tun hat... aber wie ich das löse weiß ich jetzt nicht. Bin für jede Hilfe dankbar. )) |
AW: Fehler beim Passwortstärkeberechnung
Das sieht mir viel zu sehr nach Voodoo aus.
Sogenannte starke Passwörter führen nur zu Post-Its am Bildschirm, weil man sich die Biester nicht merken kann. Vor allem, wenn man noch verlangt die bitte schön alle zwei Wochen zu ändern. Zur Lösung des Problems: Nimm kleinere Zahlen bei der Berechnung des Wertes von
Delphi-Quellcode:
- cooler, irreführender Bezeichner btw.
jahre
Sherlock |
AW: Fehler beim Passwortstärkeberechnung
Zitat:
Aber wie kann ich kleinere Werte nehmen? Dann stimmt doch die Berechnung nicht. |
AW: Fehler beim Passwortstärkeberechnung
Führe dein Programm doch mal im Debugger aus.
Dann siehst du genau, an welcher stelle es "knallt". Zur Not musst du es halt mehrmals versuchen, wenn der Fehler nur selten auftritt. Mal angenommen keine deiner Checkboxen ist angewählt...in diesem Fall wird für "summezeichen" 0 berechnet (die Klammern kannst du hier weglassen). Wenn nun die Passwortlänge auch 0 ist, so rechnest du in der nächste Zeile ![]() Hier wird wohl die Fehlermeldung herkommen. Okay. Mathe ist wohl schon ein Weilchen her. Das wars nicht. Ab der Zeile hatte ich dann aufgehört zu lesen. Delphi macht aus 0^0 = 1. So wie es auch bei Wikipedia steht. Da hat mich mein ![]() Du solltest dir also etwas überlegen, um diesen Fall abzufangen. Beispiel: Du prüfst am Anfang der Prozedure, ob die Passwortlänge > 0 ist. Ist das nicht der fall -> exit Gruß Headbucket |
AW: Fehler beim Passwortstärkeberechnung
Zitat:
|
AW: Fehler beim Passwortstärkeberechnung
Ob ein Passwort gut ist oder nicht, kannst du aber nicht wirklich berechnen. Da musst du schon die Entopie mit einbeziehen.
|
AW: Fehler beim Passwortstärkeberechnung
Hast Du eine Quelle für den Algorithmus, oder ist das selbst ausgedacht? Eventuell könnte man da ansetzen.
Sherlock |
AW: Fehler beim Passwortstärkeberechnung
Zitat:
|
AW: Fehler beim Passwortstärkeberechnung
Zitat:
Ich habe das selber ausgedacht. (((Anzahl Zeichen^Passwortlänge)/Schlüssel in der Sekunde, dass ein moderner Rechner schafft)/Sekunden im Jahr)/1000 Ich teile das ganze durch 1000 um die Entwicklung der Prozessoren einzuberechnen. |
AW: Fehler beim Passwortstärkeberechnung
Die Formel berechnet also die Anzahl der möglichen Kennwörter, die sich mit den Checkbox-Einstellungen generieren lassen. Aus dieser Anzahl wird unter der Annahme, das soundsoviele Kennwörter pro Sekunde mit brute force probiert werden, die Anzahl der Jahre ausgerechnet, die ein BF-Algorithmus benötigt, um alle Kombinationen durchzurechnen. Soweit richtig geraten?
Na ja. Nicht blöd und kein Voodoo (außer die Geschwindigkeit des BF, da würde ich noch die Quelle angeben). Zitat:
Zitat:
Delphi-Quellcode:
Dann versteht man gleich, worum es geht. Oder?
var
AnzahlUnterschiedlicherZeichen : integer; begin AnzahlUnterschiedlicherZeichen := 0; if UppercaseCB.Checked then inc (AnzahlUnterschiedlicherZeichen , 26); if LowercaseCB.Checked then inc (AnzahlUnterschiedlicherZeichen , 26); if DigitsCB.Checked then inc (AnzahlUnterschiedlicherZeichen , 10); if ArithmoperatorsCB.Checked then inc(AnzahlUnterschiedlicherZeichen ,5); if BracketCB.Checked then inc (AnzahlUnterschiedlicherZeichen , 8); if SpecialcharsCB.Checked then inc (AnzahlUnterschiedlicherZeichen , 19); ... Zum Problem: Anstatt 'Power' zu nehmen, machst Du das mit einer Schleife und teilst 1x in der Schleife, falls das Zwischenergebnis zu groß wird. Wenn die Schleife durch ist, prüfst Du, ob Du schon geteilt hast. Wenn nicht (weil das Zwischenergebnis doch nicht zu hoch war), teilst Du dann. Hehe: Roter Kasten: Richtig geraten :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 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