Feedback

VB - Maximal Anzahl von Passwortkombinationen ermitteln

Veröffentlicht von am 06.11.2006
(6 Bewertungen)
Diese Funktion berechnet die Stärke eines Passworts und gibt die Anzahl der möglichen Kombinationen zurück
GFU-Schulungen  [Anzeige]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

''' <summary>
''' Diese Funktion berechnet die Stärke eines Passworts und gibt die Anzahl der möglichen Kombinationen zurück
''' </summary>
''' <param name="Password">Das zu prüfende Passwort</param>
''' <remarks>Für SpecialChar nehme ich einfach mal den Wert 32 weil das ein gängiger Wert für Sonderzeichen ist</remarks>
Public Function PasswordStrength(ByVal Password As String) As Double
    Try
        If Password.Length = 0 Then Return 0
        Dim ToByte() As Byte = System.Text.Encoding.Default.GetBytes(Password)
        Dim UpperCaseAlpha As Double = 0
        Dim LowerCaseAlpha As Double = 0
        Dim Numeric As Double = 0
        Dim SpecialChar As Double = 0
        For i As Integer = 0 To ToByte.Length - 1
            If ToByte(i) >= 65 And ToByte(i) <= 90 Then UpperCaseAlpha = 26
            If ToByte(i) >= 97 And ToByte(i) <= 122 Then LowerCaseAlpha = 26
            If ToByte(i) >= 48 And ToByte(i) <= 57 Then Numeric = 10
            If Not (ToByte(i) >= 65 And ToByte(i) <= 90) And Not (ToByte(i) >= 97 And ToByte(i) <= 122) And Not (ToByte(i) >= 48 And ToByte(i) <= 57) Then SpecialChar = 32
        Next
        Return Math.Pow(UpperCaseAlpha + LowerCaseAlpha + Numeric + SpecialChar, ToByte.Length)
    Catch ex As Exception
        Return -1
    End Try
End Function
Abgelegt unter Passwort.

4 Kommentare zum Snippet

General Bison schrieb am 23.01.2009:
Wirklich cool!
Sowas hab ich schon immer gesucht ;)
Habs auchs chon lange in meinen Favoriten, bin aber NIE dazu gekommen es mal zu banutzen. ABER nu gibs auch ne wertung.
General Bison schrieb am 26.01.2009:
hab das return in


Return String.Format("{0:0}", Math.Pow(UpperCaseAlpha + LowerCaseAlpha + Numeric + SpecialChar, ToByte.Length))


geändert um der Wissenschaftlichen Zahl zu entgehen ;)
Klemens Nanni schrieb am 04.01.2011:
Wieso verwendest du den Gleitkommazahltyp, wenn ausschließlich mit Ganzzahlen gerechnet wird?
Zum einen wird im Falle eines Sonderzeichens der entsprechende Wert gleich 12 Mal -eindeutig zu oft- geprüft, zum anderen käme ein If-Else-Konstrukt dem nicht umgesetzten Auschluss-Prinzip weit mehr zu Gute.
Ich möchte einmal auf meine, so denke ich, etwas gelungerene Umsetzung im folgenden Snippet aufmerksam machen: http://dotnet-snippets.de/dns/passwortgenerator-SID1482.aspx
Koopakiller schrieb am 09.06.2016:
@Klemens
Ein Double zu verwenden macht schon Sinn. Denn der Werte Bereich eines UInt32 wäre schnell überschritten. Der eines UInt64 ist auch noch kein wirkliches Hindernis, wenn man bedenkt das bereits ein 10-zeichiges Passwort was alle Zeichen ausnutzt die 2^64-1 überschreitet.
Ein Double dagegen kann bis zu rund 10^308 als Zahl aufnehmen, wenn auch nur stark gerundet.

Wie du das mit den 12mal meinst weiß ich nicht, eine 32 kommt aber im Code vor. Und die macht schon Sinn wenn man die unzähligen Sonderzeichen bedenkt die man verwenden kann. Wenn man es drauf anlegt kommt man sogar auf um die 60 Sonderzeichen die auf einer deutschen Tastatur möglich sind.

Da die Passwortstärke eigentlich nur dann relevant wird, wenn man es mit Brute Force knacken will, ist es vor allem wichtig zu gucken welche Gruppen von Zeichen denn verwendet wurden, von daher finde ich das hier gezeigte Konzept nicht schlecht. Auch wenn man vielleicht noch zwischen Gruppen von Sonderzeichen unterscheiden könnte, da ja beispielsweise ö nicht wirklich gleich verwendet wird wie $

Als Problematisch empfinde ich die Fehlerbehandlung. Probleme gibt es wenn Password = Nothing ist. Auch finde ich das Abfangen der Exception nutzlos, eher würde ich diese hier einfach weiter "bubblen" lassen. Denn schief gehen kann eben nur ein Nothing-Passwort oder aber irgendwelche internen Fehler.
 

Logge dich ein, um hier zu kommentieren!