c#随机生成强类型密码
时间: 2023-07-27 15:23:08 浏览: 53
可以使用C#内置的`Random`类来生成随机密码,然后使用密码强度校验器来确保密码强度。以下是一个示例代码:
```csharp
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web.Security;
public static class PasswordGenerator
{
private static readonly Random Random = new Random();
public static string GeneratePassword(int length = 12)
{
const string validChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*?_-";
var password = new char[length];
for (var i = 0; i < length; i++)
{
var index = Random.Next(validChars.Length);
password[i] = validChars[index];
}
var passwordString = new string(password);
var passwordValidator = new PasswordStrengthChecker();
var validationResult = passwordValidator.CheckPasswordStrength(passwordString);
if (validationResult > MembershipPasswordStrength.Strong)
{
return passwordString;
}
return GeneratePassword(length);
}
}
public class PasswordStrengthChecker
{
public MembershipPasswordStrength CheckPasswordStrength(string password)
{
var score = 0;
var hasDigit = false;
var hasLowerCase = false;
var hasUpperCase = false;
var hasNonAlphanumeric = false;
foreach (var c in password)
{
if (char.IsDigit(c))
{
hasDigit = true;
score += 1;
}
else if (char.IsLower(c))
{
hasLowerCase = true;
score += 1;
}
else if (char.IsUpper(c))
{
hasUpperCase = true;
score += 1;
}
else
{
hasNonAlphanumeric = true;
score += 2;
}
}
if (!hasDigit || !hasLowerCase || !hasUpperCase || !hasNonAlphanumeric)
{
score = Math.Max(1, score);
}
if (password.Length < 8)
{
score = Math.Max(1, score);
}
else if (password.Length < 11)
{
score += 1;
}
else
{
score += 2;
}
if (score <= 1)
{
return MembershipPasswordStrength.Weak;
}
if (score <= 3)
{
return MembershipPasswordStrength.Medium;
}
if (score <= 6)
{
return MembershipPasswordStrength.Strong;
}
return MembershipPasswordStrength.VeryStrong;
}
}
```
这个代码使用`Random`类生成随机数,并使用自定义的`PasswordStrengthChecker`类校验密码强度。你可以按照自己的需要修改密码长度和密码强度校验规则。