Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Passwortsicherheit bewerten, Take 3

Uploader:RedakteurMao
Datum/Zeit:18.10.2007 13:55:42

' Autoren: Mao, volta

Declare Function ZeichenInString(ByVal s As String, ByVal iStart As Byte, _
                                 ByVal iEnde As Byte) As Integer

Declare Function PasswortSicherheit(ByVal sPasswort As String) As Integer

Dim As String s
Do
  Input "PW: ", s
  Print PasswortSicherheit(s)
Loop Until s="quit"


Function ZeichenInString(ByVal s As String, ByVal iStart As Byte, _
                         ByVal iEnde As Byte) As Integer
  Dim As Integer iZeichen

  For i As Integer=0 To Len(s)-1
    If (s[i]>=iStart) And (s[i]<=iEnde) Then
      iZeichen+=1
    End If
  Next i

  Function=iZeichen
End Function

Function PasswortSicherheit(ByVal sPasswort As String) As Integer
  Dim As Integer iGrBst, iKlBst, iSonder, iZahlen, iGrBstPr, iKlBstPr, _
                 iZahlenPr, iSonderPr, iLaengPw, iWertung

  iLaengPw=Len(sPasswort)
  If iLaengPw>0 Then
    iGrBst=ZeichenInString(sPasswort, Asc("A"), Asc("Z"))
    iKlBst=ZeichenInString(sPasswort, Asc("A"), Asc("Z"))
    iZahlen=ZeichenInString(sPasswort, Asc("0"), Asc("9"))
    iSonder=iLaengPw-iGrBst-iKlBst-iZahlen
    iGrBstPr=(iGrBst*100)/iLaengPw
    iKlBstPr=(iKlBst*100)/iLaengPw
    iZahlenPr=(iZahlen*100)/iLaengPw
    iSonderPr=(iSonder*100)/iLaengPw

    ' für jedes zusätzliche Zeichen nach dem 7. einen Punkt
    ' alternativ, d.h. wenn weniger als 7 Zeichen, Abzug
    ' (warum 7? 6 erscheint mir ein bisschen wenig, 8 ein bisschen hart. ;)
    iWertung=iLaengPw-7

    ' für jede "Zeichenart" einen Punkt
    If iGrBst>0 Then iWertung+=1
    If iKlBst>0 Then iWertung+=1
    If iZahlen>0 Then iWertung+=1
    If iSonder>0 Then iWertung+=1

    ' für Ausgewogenheit der Anteile der Zeichenarten jeweils einen Punkt
    If iGrBstPr>20 Then iWertung+=1
    If iKlBstPr>20 Then iWertung+=1
    If iZahlenPr>10 Then iWertung+=1
    If iSonderPr>10 Then iWertung+=1

    'zuviel von einer Sorte ist schlecht :)
    If iGrBstPr>80 Then iWertung-=1
    If iKlBstPr>80 Then iWertung-=1
    If iZahlenPr>60 Then iWertung-=1

    'Sonderfälle
    If iGrBst=1 Then 'Begriff | NAME ?
      If ZeichenInString(Left(sPasswort,1), Asc("A"), Asc("Z"))=1 Then iWertung-=2
    End If
    If iZahlen>0 Then 'Jahreszahlen | Geburtsdatum | Nummer - angehängt
      If ZeichenInString(Right(sPasswort, iZahlen), Asc("0"), Asc("9"))=iZahlen Then iWertung-=1
    End If

    ' Werte trimmen: nur Werte zwischen 0 und 10 sind zulässig
    If iWertung<0 Then iWertung=0
    If iWertung>10 Then iWertung=10
  End If

  Function=iWertung
End Function