Asp.net

如何測試 ASP.NET 成員密碼是否滿足配置的複雜性要求?

  • December 17, 2008

我有一個 ASP.NET 頁面,它允許管理員更改使用者的密碼。由於管理員不知道使用者的密碼,我正在使用以下內容:

MembershipUser member = Membership.GetUser(_usernameTextBox.Text);
member.ChangePassword(member.ResetPassword(), _passNewTextBox.Text);

如果新密碼不符合 web.config 文件中配置的複雜性要求,則密碼將被重置,但不會更改為所需的密碼。如果新密碼不滿足複雜性要求,則根本不應該更改密碼。

是否有一種簡單的方法可以根據複雜性要求測試新密碼?

您可以使用以下屬性來測試密碼:

請注意,如果您尚未在 web.config 文件中配置 PasswordStrengthRegularExpression 屬性,它將是一個空字元串。

有關正則表達式匹配的資訊,請參閱Regex.IsMatch(String)上的 MSDN 參考

*感謝馬特的有用評論。

/// <summary>
/// Checks password complexity requirements for the actual membership provider
/// </summary>
/// <param name="password">password to check</param>
/// <returns>true if the password meets the req. complexity</returns>
static public bool CheckPasswordComplexity(string password)
{
   return CheckPasswordComplexity(Membership.Provider, password);
}


/// <summary>
/// Checks password complexity requirements for the given membership provider
/// </summary>
/// <param name="membershipProvider">membership provider</param>
/// <param name="password">password to check</param>
/// <returns>true if the password meets the req. complexity</returns>
static public bool CheckPasswordComplexity(MembershipProvider membershipProvider, string password)
{
   if (string.IsNullOrEmpty(password)) return false;
   if (password.Length < membershipProvider.MinRequiredPasswordLength) return false;
   int nonAlnumCount = 0;
   for (int i = 0; i < password.Length; i++)
   {
       if (!char.IsLetterOrDigit(password, i)) nonAlnumCount++;
   }
   if (nonAlnumCount < membershipProvider.MinRequiredNonAlphanumericCharacters) return false;
   if (!string.IsNullOrEmpty(membershipProvider.PasswordStrengthRegularExpression) &&
       !Regex.IsMatch(password, membershipProvider.PasswordStrengthRegularExpression))
   {
       return false;
   }
   return true;
}

引用自:https://stackoverflow.com/questions/375524