이 메서드는 몇 가지 강력한 암호 특성을 확인하고 실패하는 암호를 검사하는 정보를 사용하여 문자열 매개 변수를 업데이트합니다.
보안 시스템에서 암호를 사용하여 사용자에게 권한을 부여할 수 있습니다. 그러나 권한이 없는 사용자가 추측하기는 암호가 어려워야 합니다. 공격자는 사전 공격 프로그램을 사용하여 사전의 모든 단어(또는 다른 언어의 여러 사전)를 반복하고 단어가 사용자의 암호로 작동하는지 여부를 테스트할 수 있습니다. "양키스" 또는 "머스탱"과 같은 약한 암호는 신속하게 추측할 수 있습니다. "?You'L1N3vaFiNdMeyeP@sSWerd!"와 같은 강력한 암호는 추측될 가능성이 훨씬 적습니다. 암호로 보호된 시스템은 사용자가 강력한 암호를 선택하도록 해야 합니다.
강력한 암호는 복잡하며(대문자, 소문자, 숫자 및 특수 문자가 혼합되어 있음) 단어가 아닙니다. 이 예제에서는 복잡성을 확인하는 방법을 보여 줍니다.
예시
코드
''' <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
코드 컴파일
해당 암호를 포함하는 문자열을 전달하여 이 메서드를 호출합니다.
이 예제에는 다음 사항이 필요합니다.
-
System.Text.RegularExpressions 네임스페이스 멤버에 액세스. 코드에서 멤버 이름을 완전히 정규화하지 않는다면
Imports
구문을 추가하십시오. 자세한 내용은 Imports 문구(.NET 네임스페이스 및 형식)을 참조하세요.
안전
네트워크를 통해 암호를 이동하는 경우 데이터를 전송하기 위해 보안 방법을 사용해야 합니다. 자세한 내용은 ASP.NET Web Application Security를 참조하세요.
복잡성 검사를 추가하여 함수의 ValidatePassword
정확도를 향상시킬 수 있습니다.
암호와 해당 부분 문자열을 사용자의 이름, 사용자 식별자 및 애플리케이션 정의 사전과 비교합니다. 또한 비교를 수행할 때 시각적으로 유사한 문자를 동등한 문자로 처리합니다. 예를 들어 문자 "l" 및 "e"를 숫자 "1" 및 "3"과 동일하게 처리합니다.
대문자 하나만 있는 경우 암호의 첫 번째 문자가 아닌지 확인합니다.
암호의 마지막 두 문자가 문자 문자인지 확인합니다.
키보드의 맨 위 행에서 모든 기호를 입력하는 암호를 허용하지 않습니다.
참고하십시오
.NET