Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式生成满足Active Directory密码策略复杂性要求的随机密码_C#_Asp.net_Regex_Active Directory_Directoryservices - Fatal编程技术网

C# 以编程方式生成满足Active Directory密码策略复杂性要求的随机密码

C# 以编程方式生成满足Active Directory密码策略复杂性要求的随机密码,c#,asp.net,regex,active-directory,directoryservices,C#,Asp.net,Regex,Active Directory,Directoryservices,我正在尝试使用设置密码以实现忘记密码功能 publicstringsetpassword(字符串用户名、字符串密码) { 字符串结果=string.Empty; PrincipalContext ctx=新PrincipalContext(ContextType.Domain); UserPrincipal user=UserPrincipal.FindByIdentity(ctx,用户名); AdUser AdUser=新AdUser(); 如果(用户!=null) { user.SetPas

我正在尝试使用设置密码以实现忘记密码功能

publicstringsetpassword(字符串用户名、字符串密码)
{
字符串结果=string.Empty;
PrincipalContext ctx=新PrincipalContext(ContextType.Domain);
UserPrincipal user=UserPrincipal.FindByIdentity(ctx,用户名);
AdUser AdUser=新AdUser();
如果(用户!=null)
{
user.SetPassword(随机密码);
结果=“成功”;
}
返回结果;
}
我需要生成满足以下复杂性的随机密码:

  • 不包含用户帐户名或用户全名中超过两个连续字符的部分
  • 长度至少为六个字符
  • 包含以下四个类别中三个类别的字符:
    • 英文大写字符(A到Z)
    • 英文小写字符(a到z)
    • 以10位为基数(0到9)
    • 非字母字符(例如,!、$、#、%)
更改或创建密码时强制执行复杂性要求

是否有满足上述要求的内置方法?我使用以下方法随机生成密码:

string randomPassword=Membership.GeneratePassword(8,0).Replace(“”,#’);

当我试图设置密码时,它抛出错误。感谢您提供验证或内置方法来实现上述要求。

我认为使用ActiveDirectoryMembershipProvider的
ResetPassword()
方法应该完全满足您的要求

我认为使用ActiveDirectoryMembershipProvider的
ResetPassword()
方法应该完全满足您的要求

看看这样的东西是否适合你。我最初是为.NETIdentity 2写这篇文章的,但它应该为您指出正确的方向。你可以看到我是怎么用它的


看看这样的东西是否适合你。我最初是为.NETIdentity 2写这篇文章的,但它应该为您指出正确的方向。你可以看到我是怎么用它的



从该页面
中,由ResetPassword方法创建的随机密码不能保证传递PasswordStrengthRegularExpression属性中的正则表达式
从该页
通过ResetPassword方法创建的随机密码不保证传递PasswordStrengthRegularExpression属性中的正则表达式我不能在生成部分帮助你,但我可以给你一个正则表达式来验证它。你可以从每个类别中随机生成1-3个项目,然后随机混合。然后通过一个验证正则表达式运行它们,以确保。在国际海事组织,验证正则表达式更为困难。长度为6到9的将不可破解。此
不包含用户帐户名或超过两个连续字符的部分用户全名
需要单独的正则表达式或进程。剩下的可以用一个正则表达式验证。我同意。请给我提供正则表达式验证。谢谢你有下面的用户验证。如果您有更快更好的验证,请告诉我。谢谢你的主意。谢谢你的帮助。bool isANameCharRepeats=Regex.Matches(uName,“(?=”)”).Cast().Select(m=>m.Groups[1].Value).Any(y=>randomPassword.IndexOf(y)!=-1);我不能在生成部分帮助你,但我可以给你一个正则表达式来验证它。你可以从每个类别中随机生成1-3个项目,然后随机混合它们。然后通过一个验证正则表达式运行它们,以确保。在国际海事组织,验证正则表达式更为困难。长度为6到9的将不可破解。此
不包含用户帐户名或超过两个连续字符的部分用户全名
需要单独的正则表达式或进程。剩下的可以用一个正则表达式验证。我同意。请给我提供正则表达式验证。谢谢你有下面的用户验证。如果您有更快更好的验证,请告诉我。谢谢你的主意。谢谢你的帮助。bool isANameCharRepeats=Regex.Matches(uName,“(?=”)”).Cast().Select(m=>m.Groups[1].Value).Any(y=>randomPassword.IndexOf(y)!=-1);它不检查不包含用户帐户名或部分超过两个连续字符的用户全名验证。您完全可以为此编写逻辑。我已经编写了相同的逻辑,它似乎工作正常。感谢您的指导。它不检查不包含用户帐户名或部分用户全名超过两个连续字符的验证。您完全可以为此编写逻辑。我已经编写了相同的逻辑,它似乎工作正常。谢谢你的指导。
var validator = new PasswordValidator
{
    RequiredLength = 6,
    RequireNonLetterOrDigit = false,
    RequireDigit = true,
    RequireLowercase = true,
    RequireUppercase = true
};

passwords.Add(GeneratePassword(validator));


private static string GeneratePassword(PasswordValidator passwordValidator)
{
    var rnd = new Random();

    while (true)
    {
        var password = Membership.GeneratePassword(passwordValidator.RequiredLength, 0);
        if ((passwordValidator.RequireDigit && !password.Any(char.IsDigit)) || (passwordValidator.RequireLowercase && !password.Any(char.IsLower)) || (passwordValidator.RequireUppercase && !password.Any(char.IsUpper)))
            continue;

        if (!passwordValidator.RequireNonLetterOrDigit) password = Regex.Replace(password, @"[^a-zA-Z0-9]", m => rnd.Next(0, 10).ToString());
        return password;
    }
}