fb:porticula NoPaste
Passwortsicherheit bewerten, Take 3
Uploader: | Mao |
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