Explorar o código

强密码验证支持配置参数;移除简繁转换组件,推荐使用微软官方的CHTCHSConv库

懒得勤快 %!s(int64=4) %!d(string=hai) anos
pai
achega
1b9edda8ad

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 76
Masuit.Tools.Abstractions/Strings/ChineseString.cs


+ 67 - 10
Masuit.Tools.Abstractions/Validator/ComplexPassword.cs

@@ -6,8 +6,36 @@ namespace Masuit.Tools.Core.Validator
     /// <summary>
     /// 强密码验证
     /// </summary>
-    public class ComplexPassword : ValidationAttribute
+    public class ComplexPasswordAttribute : ValidationAttribute
     {
+        /// <summary>
+        /// 必须包含数字
+        /// </summary>
+        public bool MustNumber { get; set; } = true;
+
+        /// <summary>
+        /// 必须包含小写或大写字母
+        /// </summary>
+        public bool MustLetter { get; set; } = true;
+
+        /// <summary>
+        /// 必须包含特殊符号
+        /// </summary>
+        public bool MustSymbol { get; set; } = true;
+
+        private readonly int _minLength = 6;
+        private readonly int _maxLength = 30;
+
+        public ComplexPasswordAttribute()
+        {
+        }
+
+        public ComplexPasswordAttribute(int minLength, int maxLength)
+        {
+            _minLength = minLength;
+            _maxLength = maxLength;
+        }
+
         /// <summary>
         /// 校验密码强度
         /// </summary>
@@ -15,22 +43,51 @@ namespace Masuit.Tools.Core.Validator
         /// <returns></returns>
         public override bool IsValid(object value)
         {
-            string pwd = value as string;
-            if (pwd.Length <= 6)
+            string pwd = value.ToString();
+            if (pwd.Length < _minLength)
             {
-                ErrorMessage = "密码过短,至少需要6个字符!";
+                ErrorMessage = $"密码过短,至少需要{_minLength}个字符!";
                 return false;
             }
-            var regex = new Regex(@"(?=.*[0-9])                     #必须包含数字
-                                            (?=.*[a-zA-Z])                  #必须包含小写或大写字母
-                                            (?=([\x21-\x7e]+)[^a-zA-Z0-9])  #必须包含特殊符号
-                                            .{6,30}                         #至少6个字符,最多30个字符
-                                            ", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
+            string regStr = "";
+            if (MustNumber)
+            {
+                regStr += "(?=.*[0-9])"; //必须包含数字
+            }
+
+            if (MustLetter)
+            {
+                regStr += "(?=.*[a-zA-Z])";//必须包含小写或大写字母
+            }
+
+            if (MustSymbol)
+            {
+                regStr += @"(?=([\x21-\x7e]+)[^a-zA-Z0-9])";//必须包含特殊符号
+            }
+
+            var regex = new Regex($"{regStr}.{{{_minLength},{_maxLength}}}", RegexOptions.IgnorePatternWhitespace);
             if (regex.Match(pwd).Success)
             {
                 return true;
             }
-            ErrorMessage = "密码强度值不够,密码必须包含数字,必须包含小写或大写字母,必须包含至少一个特殊符号,至少6个字符,最多30个字符!";
+
+            string error = "密码强度值不够,密码";
+            if (MustNumber && !Regex.IsMatch(pwd, "(?=.*[0-9])"))
+            {
+                error += "必须包含数字,";
+            }
+
+            if (MustLetter && !Regex.IsMatch(pwd, "(?=.*[a-zA-Z])"))
+            {
+                error += "必须包含小写或大写字母,";
+            }
+
+            if (MustSymbol && !Regex.IsMatch(pwd, @"(?=([\x21-\x7e]+)[^a-zA-Z0-9])"))
+            {
+                error += "必须包含至少一个特殊符号,";
+            }
+
+            ErrorMessage = error + $"至少{_minLength}个字符,最多{_maxLength}个字符!";
             return false;
         }
     }

+ 1 - 4
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -60,7 +60,7 @@
         <PackageReference Include="System.Drawing.Common" Version="5.0.0" />
     </ItemGroup>
     <ItemGroup Condition=" '$(TargetFramework)' == 'net5'">
-        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.4" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.5" />
         <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="5.0.1" />
         <PackageReference Include="System.Drawing.Common" Version="5.0.2" />
     </ItemGroup>
@@ -320,9 +320,6 @@
         <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaPem.cs">
             <Link>Security\RsaPem.cs</Link>
         </Compile>
-        <Compile Include="..\Masuit.Tools.Abstractions\Strings\ChineseString.cs">
-            <Link>Strings\ChineseString.cs</Link>
-        </Compile>
         <Compile Include="..\Masuit.Tools.Abstractions\Strings\NumberFormater.cs">
             <Link>Strings\NumberFormater.cs</Link>
         </Compile>

+ 0 - 3
Masuit.Tools/Masuit.Tools.csproj

@@ -305,9 +305,6 @@
     <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaPem.cs">
       <Link>Security\RsaPem.cs</Link>
     </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Strings\ChineseString.cs">
-      <Link>Strings\ChineseString.cs</Link>
-    </Compile>
     <Compile Include="..\Masuit.Tools.Abstractions\Strings\NumberFormater.cs">
       <Link>Strings\NumberFormater.cs</Link>
     </Compile>

+ 12 - 0
NetCoreTest/Program.cs

@@ -1,4 +1,5 @@
 using Masuit.Tools;
+using Masuit.Tools.Core.Validator;
 using Masuit.Tools.Models;
 using Masuit.Tools.Reflection;
 using Masuit.Tools.Security;
@@ -16,6 +17,17 @@ namespace NetCoreTest
     {
         public static void Main(string[] args)
         {
+            var cpa = new ComplexPasswordAttribute(6, 30)
+            {
+                MustNumber = false,
+                MustSymbol = true,
+                MustLetter = false
+            };
+            var valid = cpa.IsValid("000000a");
+            Console.WriteLine(cpa.ErrorMessage);
+
+
+            Console.ReadKey();
             var myClass = new MyClass()
             {
                 MyProperty1 = 1,

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio