考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
  当前位置:编程开发 > DotNET > VB.Net > 文章内容
  

vb.net验证密码是否复杂的方法

 [ 2017年6月29日 ] 【

  可在安全的系统中使用密码来向用户授权。但是,密码必须难于被未授权用户猜测出来。攻击者可以使用一种“字典攻击”程序,该程序将遍历一本字典(或不同语言的多本字典)中的所有单词,并测试是否有任何单词就是用户的密码。诸如“Yankees”或“Mustang”等弱密码可被很快猜测出来。诸如“?You'L1N3vaFiNdMeyeP@sSWerd!”等强密码被猜测出来的可能性要小很多。密码保护系统应确保用户选择强密码。

  强密码很复杂(包含大写、小写、数字和特殊字符的组合),并且不是单词。此示例演示如何验证复杂性。

  示例

  '''

Determines if a password is sufficiently complex.

  ''' Password to validate

  ''' Minimum number of password characters.

  ''' Minimum number of uppercase characters.

  ''' Minimum number of lowercase characters.

  ''' Minimum number of numeric characters.

  ''' Minimum number of special characters.

  ''' True if the password is sufficiently complex.

  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 应用程序安全性。

  通过添加额外的复杂性检查,您可以改进 ValidatePassword 函数的准确性:

  依据用户的名称、用户标识符和应用程序定义的字典来比较密码及其子字符串。此外,在执行比较时,将看起来类似的字符视为相同字符。例如,将字母“l”和“e”视为与数字“1”和“3”相同的字符。

  如果只有一个大写字符,请确保它不是密码的第一个字符。

  确保密码的最后两个字符是字母字符。

  不允许这样的密码:其中的所有符号都是通过键盘最上面的一排键输入的。

本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2007-2013 中华考试网(Examw.com) All Rights Reserved