Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Passwort Sicherheit Code anwenden (https://www.delphipraxis.net/64464-passwort-sicherheit-code-anwenden.html)

mOzZzI 3. Mär 2006 22:54


Passwort Sicherheit Code anwenden
 
Hallo,
ich habe eine Frage: Wie wende ich den Code von Hagen an?
Code:

Delphi-Quellcode:
function PassphraseQuality(const Password: String): Extended;
// returns computed Quality in range 0.0 to 1.0
// source extracted from Delphi Encryption Compendium, DEC

  function Entropy(P: PByteArray; L: Integer): Extended;
  var
    Freq: Extended;
    I: Integer;
    Accu: array[Byte] of LongWord;
  begin
    Result := 0.0;
    if L <= 0 then Exit;
    FillChar(Accu, SizeOf(Accu), 0);
    for I := 0 to L-1 do Inc(Accu[P[I]]);
    for I := 0 to 255 do
      if Accu[I] <> 0 then
      begin
        Freq := Accu[I] / L;
        Result := Result - Freq * (Ln(Freq) / Ln(2));
      end;
  end;

  function Differency: Extended;
  var
    S: String;
    L,I: Integer;
  begin
    Result := 0.0;
    L := Length(Password);
    if L <= 1 then Exit;
    SetLength(S, L-1);
    for I := 2 to L do
      Byte(S[I-1]) := Byte(Password[I-1]) - Byte(Password[I]);
    Result := Entropy(Pointer(S), Length(S));
  end;

  function KeyDiff: Extended;
  const
    Table = '^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=?`QWERTZUIOPÜ*ASDFGHJKLÖÄ''>YXCVBNM;:_';
  var
    S: String;
    L,I,J: Integer;
  begin
    Result := 0.0;
    L := Length(Password);
    if L <= 1 then Exit;
    S := Password;
    UniqueString(S);
    for I := 1 to L do
    begin
      J := Pos(S[I], Table);
      if J > 0 then S[I] := Char(J);
    end;
    for I := 2 to L do
      Byte(S[I-1]) := Byte(S[I-1]) - Byte(S[I]);
    Result := Entropy(Pointer(S), L-1);
  end;

const
  GoodLength = 10.0; // good length of Passphrases
var
  L: Extended;
begin
  Result := Entropy(Pointer(Password), Length(Password));
  if Result <> 0 then
  begin
    Result := Result * (Ln(Length(Password)) / Ln(GoodLength));
    L := KeyDiff + Differency;
    if L <> 0 then L := L / 64;
    Result := Result * L;
    if Result < 0 then Result := -Result;
    if Result > 1 then Result := 1;
  end;
end;
Wie kann ich den jetzt z.B.:

Delphi-Quellcode:
procedure Tneu_account.Edit1Change(Sender: TObject);
begin
 ProgressBar1.Position:=PassphraseQuality(edit1.Text);
end;
Aber das geht ja nich, wie mache ich das?

DGL-luke 3. Mär 2006 23:00

Re: Passwort Sicherheit Code anwenden
 
186 Beiträge und noch nie von Delphi-Referenz durchsuchenRound gehört?! :gruebel: :zwinker:

EDIT: Eventuell Ganz bestimmt musst du das auch noch multiplizieren ;)

mOzZzI 3. Mär 2006 23:01

Re: Passwort Sicherheit Code anwenden
 
Zitat:

Zitat von DGL-luke
186 Beiträge und noch nie von Delphi-Referenz durchsuchenRound gehört?! :gruebel: :zwinker:

:oops:

Stimmt ja :wall:

leddl 3. Mär 2006 23:02

Re: Passwort Sicherheit Code anwenden
 
Schau dir mal die ersten 2 Zeilen von Hagens Code an:
Code:
function PassphraseQuality(const Password: String): [b]Extended[/b];
// returns computed Quality in [b]range 0.0 to 1.0[/b]
Daraus solltest du eigentlich erkennen können, was zu tun ist :zwinker:

mOzZzI 3. Mär 2006 23:06

Re: Passwort Sicherheit Code anwenden
 
hab nochn problem, habe jetzt mit round eingebaut, doch es funzt net...
Erst wenn ich vill über 200buchstaben und zahlen eingegeben hab gewegt sich ein balken^^
?? Was hab ich falsch gemacht?

DGL-luke 3. Mär 2006 23:16

Re: Passwort Sicherheit Code anwenden
 
schau dir einfach mein edit oben an...

mOzZzI 3. Mär 2006 23:19

Re: Passwort Sicherheit Code anwenden
 
Zitat:

Zitat von DGL-luke
186 Beiträge und noch nie von Delphi-Referenz durchsuchenRound gehört?! :gruebel: :zwinker:

EDIT: Eventuell Ganz bestimmt musst du das auch noch multiplizieren ;)

Sry, aber mit was multiplizieren? :oops:

DGL-luke 3. Mär 2006 23:22

Re: Passwort Sicherheit Code anwenden
 
Also, jetzt nochmal für Leute mit dem :stupid:-smiley im avatar:

Delphi-Quellcode:
Progressbar1.position := round(passlevel * Progressbar1.max);
Unter der annahme, progressbar1.Min = 0

PS: so früh ist coden schon schwierig...

negaH 4. Mär 2006 01:15

Re: Passwort Sicherheit Code anwenden
 
Exakt, und wenn man sich das mal genau überlegt so wird man sicherlich auch feststellen das ich mir dabei was gedacht hatte :)

Die Funktion gibt einen Wert zwischen 0.0 für schlecht und 1.0 für super gut zurück.
Wenn du das in Prozent umrechnen willst dann also einfach mit 100 multiplizieren. Hast du aber eine ProgressBar die maximal bis 25 geht hast, dann eben mit 25 multiplizieren. Einfacher gehts nicht ;)

Berücksichtige aber auch das diese Funktion kein "Allerheilmittel" sein kann, eher ein Anhaltspunkt.
Ein gutes Passwort kann man "niemals" berechnen, ansonsten wäre es ja nicht mehr sicher. Ergo wird es auch nie einen einfachen Algorithmus geben können der ein Passwort mit hoher Genauigkeit als sicher/unsicher einstufen kann.
Relativ gesehen wurde aber alles im Algo. berücksichtigt was technisch sinnvoll und umsetzbar ist.

Gruß Hagen


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