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

可在安全的系统中使用密码来向用户授权。但是,密码必须难于被未授权用户猜测出来。攻击者可以使用一种“字典攻击”程序,该程序将遍历一本字典(或不同语言的多本字典)中的所有单词,并测试是否有任何单词就是用户的密码。诸如“Yankees”或“Mustang”等弱密码可被很快猜测出来。诸如“?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 应用程序安全性。

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

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

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

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

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

(0)

相关推荐

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

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

  • django中账号密码验证登陆功能的实现方法

    今天分享一下django的账号密码登陆,前端发送ajax请求,将用户名和密码信息发送到后端处理,后端将前端发送过来的数据跟数据库进行过滤匹配,成功就跳转指定页面,否则就把相对应的错误信息返回,同时增加一个小功能,在规定时间内超过规定的登录次数,就锁住无法登陆,等下一个时间段再允许登陆. 一.通过ORM创建一张历史登陆表 class login_history(models.Model): user = models.CharField(max_length=32, verbose_name='登

  • jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法

    本文实例讲述了jQuery实现验证表单密码一致性及正则表达式验证邮箱.手机号的方法. jQuery 脚本 <script type="text/javascript"> function check_password() { if ($("#password").val() != $("#checkPWD").val()){ alert("请保证两次输入密码的一致性!"); $("#checkPWD&qu

  • vue 验证两次输入的密码是否一致的方法示例

    好记性不如烂笔头.总也记不住 <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-form-item label="新密码" prop="newPwd"> <el-input v-mo

  • JavaScript正则验证密码强弱度的实现方法

    展示 设计 密码强弱度分析 密码由数字,字母,特殊符号组成 密码: 只有数字- 或者是只有字母,或者是只有特殊符号--1级:弱 两两组合: 数字和字母, 数字和特殊符号, 字母和特殊符号--2级:中 三者都有: 数字和字母和特殊符号--3级:强 代码 版本一:基本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Do

  • 用JavaScrip正则表达式验证form表单的方法

    document:标签之间 location:url history:前进后退 <html> <head> <script type="text/javascript"> function show() { //弹出一个提示框 window.alert("hh"); } //将show方法绑定到按钮上 window.onload=function() { //定位到按钮 var buttonElement=document.for

  • IOS正则表达式之验证密码身份证手机号

    IOS正则表达式之验证密码身份证手机号 在项目中,我们在验证用户的输入,最简单的方法就是使用正则表达式了,ios系统也提供很方便的方法,让我们可以轻松的来验证用户名,密码,身份证好 ,手机号等; 下面附上我在项目中用到的正则表达式的验证方法, 由于比较常用,大家最好封装成+静态的方法,便于使用: 我把常用的方法,使用静态方法封装到一个 Utils类里面,直接使用类名调用即可: 头文件: // // Utils.h // AutoSizing // // Created by on 15/2/7.

  • php验证用户名是否以字母开头与验证密码实例

    本文实例讲述了php验证用户名是否以字母开头与验证密码的方法.分享给大家供大家参考.具体如下: 验证用户名是否以字母开头与验证密码只能为数字和字母的组合代码,三种常用验证函数:验证邮箱地址格式 ,验证密码只能为数字和字母的组合以及验证用户名是否以字母开头代码,这是用户注册时或提交表单时会用的. 复制代码 代码如下: function is_email($email)  {    if (preg_match("/[a-za-z0-9]+@[a-za-z0-9]+.[a-z]{2,4}/"

  • lnmp重置mysql数据库root密码的两种方法

    第一种方法:用军哥的一键修改LNMP环境下MYSQL数据库密码脚本 一键脚本肯定是非常方便.具体执行以下命令: wget http://soft.vpser.net/lnmp/ext/reset_mysql_root_password.sh sh reset_mysql_root_password.sh 方便吧! 第二种方法:通过命令修改,具体如下: a.停止MySQL服务 执行:/etc/init.d/mysql stop b.跳过验证启动MySQL /usr/local/mysql/bin/

  • 阿里云Linux CentOS 7.2下自建MySQL的root密码忘记的解决方法

    验证环境: [root@~~/]# rpm -qa | grep mysql mysql-5.6.28-1.el6.x86_64 [root@~~/]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.2.1511 (Core) Release: 7.2.1511 Codename: Core [root@~

随机推荐