卖门大佬黄 發表於 2008-8-18 20:41:43

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

<P>可在安全的系统中使用密码来向用户授权。但是,密码必须难于被未授权用户猜测出来。攻击者可以使用一种“字典攻击”程序,该程序将遍历一本字典(或不同语言的多本字典)中的所有单词,并测试是否有任何单词就是用户的密码。诸如“Yankees”或“Mustang”等弱密码可被很快猜测出来。诸如“?You'L1N3vaFiNdMeyeP@sSWerd!”等强密码被猜测出来的可能性要小很多。密码保护系统应确保用户选择强密码。 <br><br>强密码很复杂(包含大写、小写、数字和特殊字符的组合),并且不是单词。此示例演示如何验证复杂性。 <br><br>示例&nbsp;<br><br><div class="codetitle"><span><U>复制代码</U></span> 代码如下:</div><div class="codebody" id="code98254"><BR>''' &lt;summary&gt;Determines if a password is sufficiently complex.&lt;/summary&gt; <BR>''' &lt;param name="pwd"&gt;Password to validate&lt;/param&gt; <BR>''' &lt;param name="minLength"&gt;Minimum number of password characters.&lt;/param&gt; <BR>''' &lt;param name="numUpper"&gt;Minimum number of uppercase characters.&lt;/param&gt; <BR>''' &lt;param name="numLower"&gt;Minimum number of lowercase characters.&lt;/param&gt; <BR>''' &lt;param name="numNumbers"&gt;Minimum number of numeric characters.&lt;/param&gt; <BR>''' &lt;param name="numSpecial"&gt;Minimum number of special characters.&lt;/param&gt; <BR>''' &lt;returns&gt;True if the password is sufficiently complex.&lt;/returns&gt; <BR>Function ValidatePassword(ByVal pwd As String, _ <BR>Optional ByVal minLength As Integer = 8, _ <BR>Optional ByVal numUpper As Integer = 2, _ <BR>Optional ByVal numLower As Integer = 2, _ <BR>Optional ByVal numNumbers As Integer = 2, _ <BR>Optional ByVal numSpecial As Integer = 2) _ <BR>As Boolean <BR>' Replace with \p{Lu}, to allow for Unicode uppercase letters. <BR>Dim upper As New System.Text.RegularExpressions.Regex("") <BR>Dim lower As New System.Text.RegularExpressions.Regex("") <BR>Dim number As New System.Text.RegularExpressions.Regex("") <BR>' Special is "none of the above". <BR>Dim special As New System.Text.RegularExpressions.Regex("[^a-zA-Z0-9]") <BR>' Check the length. <BR>If Len(pwd) &lt; minLength Then Return False <BR>' Check for minimum number of occurrences. <BR>If upper.Matches(pwd).Count &lt; numUpper Then Return False <BR>If lower.Matches(pwd).Count &lt; numLower Then Return False <BR>If number.Matches(pwd).Count &lt; numNumbers Then Return False <BR>If special.Matches(pwd).Count &lt; numSpecial Then Return False <BR>' Passed all checks. <BR>Return True <BR>End Function <BR>Sub TestValidatePassword() <BR>Dim password As String = "Password" <BR>' Demonstrate that "Password" is not complex. <BR>MsgBox(password &amp; " is complex: " &amp; ValidatePassword(password)) <BR>password = "Z9f%a&gt;2kQ" <BR>' Demonstrate that "Z9f%a&gt;2kQ" is not complex. <BR>MsgBox(password &amp; " is complex: " &amp; ValidatePassword(password)) <BR>End Sub <BR></div>编译代码 <BR>通过传递包含该密码的字符串来调用此方法。 <br><br>此示例需要: <br><br>访问 System.Text.RegularExpressions 命名空间的成员。如果没有在代码中完全限定成员名称,请添加 Imports 语句。有关更多信息,请参见 Imports 语句(.NET 命名空间和类型)。 <br><br>安全性 <BR>如果要在网络中转移密码,您需要使用安全的方法来传输数据。有关更多信息,请参见 ASP.NET Web 应用程序安全性。 <br><br>通过添加额外的复杂性检查,您可以改进 ValidatePassword 函数的准确性: <br><br>依据用户的名称、用户标识符和应用程序定义的字典来比较密码及其子字符串。此外,在执行比较时,将看起来类似的字符视为相同字符。例如,将字母“l”和“e”视为与数字“1”和“3”相同的字符。 <br><br>如果只有一个大写字符,请确保它不是密码的第一个字符。 <br><br>确保密码的最后两个字符是字母字符。 <br><br>不允许这样的密码:其中的所有符号都是通过键盘最上面的一排键输入的。 <BR></P>
                           
                            <div class="art_xg">
                              
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: vb.net验证密码是否复杂的方法