Návod: Ověření, že hesla jsou složitá (Visual Basic).
Tato metoda kontroly pro některé charakteristiky silné heslo a aktualizuje informace o tom, které kontroluje hesla nezdaří parametr řetězec.
Hesla slouží k ověření uživatele v zabezpečeném systému.Však musí být obtížné neoprávněným uživatelům uhádnutí hesla.Útočníci lze použít útoku program, který prochází všechna slova ve slovníku (nebo více slovníků v různých jazycích) a ověřuje, zda některá slova pracovat jako heslo uživatele.Slabá hesla jako "Yankees" nebo "Mustang" může být rychle odhaleno.Silnější hesla, jako například "?You'L1N3vaFiNdMeyeP@sSWerd! ", je mnohem méně pravděpodobné, že být odhaleno.Chráněné heslem systému by měly zajistit, že uživatelé zvolit silná hesla.
Silné heslo je složitý (obsahující směs velká písmena, malá písmena, číselné a speciální znaky) a není slovo.Tento příklad ukazuje, jak ověřit složitosti.
Příklad
Kód
''' <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
Probíhá kompilace kódu
Tuto metodu lze volejte předáním řetězec, který obsahuje toto heslo.
Tento příklad vyžaduje:
- Přístup k členy System.Text.RegularExpressions obor názvů. Přidejte příkaz Imports, pokud plně nekvalifikujete názvy ve vašem kódu.Další informace naleznete v tématu Imports – příkaz (obor názvů a typ rozhraní .NET).
Zabezpečení
Pokud přesunujete heslo prostřednictvím sítě, je třeba použít zabezpečené metody přenosu dat.Další informace naleznete v tématu ASP.NET Web Application Security.
Můžete zvýšit přesnost ValidatePassword funkce přidáním další složitost kontroly:
Porovnání heslo a jeho dílčích řetězců proti uživatelské jméno, identifikátor uživatele a slovník definované aplikací.Kromě toho považovala vizuálně podobné znaky jako ekvivalent při provádění jejich porovnání.Písmena "l" a "e" například považovat za rovnocenné číslice "1" a "3".
Pokud existuje pouze jeden znak velkými písmeny, ujistěte se, že není heslo prvního znaku.
Ujistěte se, že poslední dva znaky hesla jsou znaky písmena.
Nepovolit hesla, které jsou vloženy všechny symboly z horní řádek klávesnici.