Wskazówki: sprawdzanie poprawności złożoności haseł (Visual Basic)
Metoda ta sprawdza, czy niektóre cechy silnego hasła i aktualizuje parametr typu string o informacje o tym, które sprawdza, czy hasła nie powiedzie się.
Hasła mogą być wykorzystywane w bezpieczny system, aby autoryzować użytkownika.Jednakże musi być trudne dla nieautoryzowanych użytkowników do odgadnięcia hasła.Można użyć atakujących atak słownikowy program, który Iterowanie poprzez wszystkie wyrazy w słowniku (lub wielu słowników w różnych językach) i sprawdza, czy dowolny wyraz działa jak hasło użytkownika.Słabe hasła, takie jak "Yankees" lub "Mustang" można szybko złamać.Silniejszych haseł, takie jak "?You'L1N3vaFiNdMeyeP@sSWerd! ", są znacznie mniej prawdopodobna złamać.System chroniony hasłem powinny zapewnić, że użytkownikom wybrać silnych haseł.
Silne hasło jest złożonych (zawierających mieszaninę wielkie litery, małe litery, numerycznych i specjalnych znaków) i nie jest słowem.Ten przykład demonstruje, jak sprawdzić, co do złożoności.
Przykład
Kod
''' <summary>Determines if a password is sufficiently complex.</summary>
''' <param name="pwd">Password to validate</param>
''' <param name="minLength">Minimum number of password characters.</param>
''' <param name="numUpper">Minimum number of uppercase characters.</param>
''' <param name="numLower">Minimum number of lowercase characters.</param>
''' <param name="numNumbers">Minimum number of numeric characters.</param>
''' <param name="numSpecial">Minimum number of special characters.</param>
''' <returns>True if the password is sufficiently complex.</returns>
Function ValidatePassword(ByVal pwd As String,
Optional ByVal minLength As Integer = 8,
Optional ByVal numUpper As Integer = 2,
Optional ByVal numLower As Integer = 2,
Optional ByVal numNumbers As Integer = 2,
Optional ByVal numSpecial As Integer = 2) As Boolean
' Replace [A-Z] with \p{Lu}, to allow for Unicode uppercase letters.
Dim upper As New System.Text.RegularExpressions.Regex("[A-Z]")
Dim lower As New System.Text.RegularExpressions.Regex("[a-z]")
Dim number As New System.Text.RegularExpressions.Regex("[0-9]")
' Special is "none of the above".
Dim special As New System.Text.RegularExpressions.Regex("[^a-zA-Z0-9]")
' Check the length.
If Len(pwd) < minLength Then Return False
' Check for minimum number of occurrences.
If upper.Matches(pwd).Count < numUpper Then Return False
If lower.Matches(pwd).Count < numLower Then Return False
If number.Matches(pwd).Count < numNumbers Then Return False
If special.Matches(pwd).Count < numSpecial Then Return False
' Passed all checks.
Return True
End Function
Sub TestValidatePassword()
Dim password As String = "Password"
' Demonstrate that "Password" is not complex.
MsgBox(password & " is complex: " & ValidatePassword(password))
password = "Z9f%a>2kQ"
' Demonstrate that "Z9f%a>2kQ" is not complex.
MsgBox(password & " is complex: " & ValidatePassword(password))
End Sub
Kompilowanie kodu
Wywołanie tej metody, przekazując ciąg, który zawiera hasło.
W tym przykładzie wymaga:
- Dostęp do elementów członkowskich z System.Text.RegularExpressions obszaru nazw.Dodaj Imports instrukcji, jeśli użytkownik są nie pełni kwalifikowanie nazwy składników w kodzie.Aby uzyskać więcej informacji, zobacz Imports — Instrukcja (.NET Namespace i Type).
Zabezpieczenia
Jeśli przenosisz hasła przez sieć, należy użyć metody bezpiecznego przekazywania danych.Aby uzyskać więcej informacji, zobacz ASP.NET Web Application Security.
Można zwiększyć dokładność ValidatePassword funkcji przez dodanie dodatkowej złożoności kontroli:
Porównać hasło i jego podciągów przeciwko nazwę użytkownika, identyfikator użytkownika i zdefiniowane przez aplikację słownika.Ponadto należy traktować wizualnie podobne znaki jako równoważne podczas przeprowadzania porównań.Na przykład traktować jako równoważne cyfry "1" i "3" litery "l" i "e".
Jeśli istnieje tylko jeden znak wielkimi literami, upewnij się, że nie jest to pierwszy znak hasła.
Upewnij się, że dwa ostatnie znaki hasła są znaki alfabetu.
Nie zezwalaj na hasła, w których wszystkie symbole są wprowadzane z klawiatury w górnym wierszu.