Ver código fonte

😉增加密码加密算法切换-国密和MD5

zuohuaijun 3 anos atrás
pai
commit
5fe93e640e

+ 1 - 1
Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj

@@ -3,7 +3,7 @@
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>
     <NoWarn>1701;1702;1591;8632</NoWarn>
-    <DocumentationFile></DocumentationFile>
+    <DocumentationFile>Admin.NET.Application.xml</DocumentationFile>
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <Nullable>disable</Nullable>
   </PropertyGroup>

+ 0 - 57
Admin.NET/Admin.NET.Application/Admin.NET.Application.xml

@@ -4,62 +4,5 @@
         <name>Admin.NET.Application</name>
     </assembly>
     <members>
-        <member name="F:Admin.NET.Application.Const.TestConst.GroupName">
-            <summary>
-            API分组名称
-            </summary>
-        </member>
-        <member name="F:Admin.NET.Application.Const.TestConst.ConfigId">
-            <summary>
-            自己业务数据库标识
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Application.Entity.Test">
-            <summary>
-            自己业务数据表
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Application.Entity.Test.Name">
-            <summary>
-            姓名
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Application.Entity.Test.Age">
-            <summary>
-            年龄
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Application.Entity.Test.BirthDate">
-            <summary>
-            出生日期
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Application.Filter.DataEntityFilter">
-            <summary>
-            自定义业务实体过滤器(XXX数据)
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Application.SeedData.TestSeedData">
-            <summary>
-            自己业务表种子数据
-            </summary>
-        </member>
-        <member name="M:Admin.NET.Application.SeedData.TestSeedData.HasData">
-            <summary>
-            种子数据
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Admin.NET.Application.Serice.TestService">
-            <summary>
-            自己业务服务
-            </summary>
-        </member>
-        <member name="M:Admin.NET.Application.Serice.TestService.GetTestList">
-            <summary>
-            获取列表
-            </summary>
-            <returns></returns>
-        </member>
     </members>
 </doc>

+ 2 - 2
Admin.NET/Admin.NET.Application/Configuration/App.json

@@ -29,8 +29,8 @@
         "WithExposedHeaders": [ "Content-Disposition", "X-Pagination", "access-token", "x-access-token" ], // 如果前端不代理且是axios请求
         "SignalRSupport": true // 启用 SignalR 跨域支持
     },
-    "Crypto": {
-        "CryptoType": "MD5", // 密码加密算法 MD5、SM
+    "Cryptogram": {
+        "CryptoType": "SM2", // 密码加密算法 MD5、SM2(国密)
         "PublicKey": "04F6E0C3345AE42B51E06BF50B98834988D54EBC7460FE135A48171BC0629EAE205EEDE253A530608178A98F1E19BB737302813BA39ED3FA3C51639D7A20C7391A", // 公钥
         "PrivateKey": "3690655E33D5EA3D9A4AE1A1ADD766FDEA045CDEAA43A9206FB8C430CEFE0D94" // 私钥
     }

+ 3 - 3
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -18,9 +18,9 @@
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="DotNetCore.Natasha.CSharp" Version="5.0.2" />
     <PackageReference Include="FluentEmail.Smtp" Version="3.0.2" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.5.7" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.5.7" />
-    <PackageReference Include="Furion.Pure" Version="4.8.5.7" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.5.8" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.5.8" />
+    <PackageReference Include="Furion.Pure" Version="4.8.5.8" />
     <PackageReference Include="Lazy.Captcha.Core" Version="2.0.1" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.7.4.2" />
     <PackageReference Include="Magicodes.IE.Pdf" Version="2.7.4.2" />

+ 82 - 48
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -2152,6 +2152,21 @@
             外国人居留证
             </summary>
         </member>
+        <member name="T:Admin.NET.Core.CryptogramEnum">
+            <summary>
+            密码加密枚举
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CryptogramEnum.MD5">
+            <summary>
+            MD5
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CryptogramEnum.SM2">
+            <summary>
+            SM2(国密)
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.CultureLevelEnum">
             <summary>
             文化程度枚举
@@ -2302,14 +2317,19 @@
             系统错误码
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.ErrorCodeEnum.D0009">
+        <member name="F:Admin.NET.Core.ErrorCodeEnum.D0008">
             <summary>
             验证码错误
             </summary>
         </member>
+        <member name="F:Admin.NET.Core.ErrorCodeEnum.D0009">
+            <summary>
+            账号不存在
+            </summary>
+        </member>
         <member name="F:Admin.NET.Core.ErrorCodeEnum.D1000">
             <summary>
-            用户名或密码不正确
+            密码不正确
             </summary>
         </member>
         <member name="F:Admin.NET.Core.ErrorCodeEnum.D1001">
@@ -3653,22 +3673,22 @@
             后端生成到的项目
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.CryptoOptions">
+        <member name="T:Admin.NET.Core.CryptogramOptions">
             <summary>
             密码配置选项
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.CryptoOptions.CryptoType">
+        <member name="P:Admin.NET.Core.CryptogramOptions.CryptoType">
             <summary>
             密码类型
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.CryptoOptions.PublicKey">
+        <member name="P:Admin.NET.Core.CryptogramOptions.PublicKey">
             <summary>
             公钥
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.CryptoOptions.PrivateKey">
+        <member name="P:Admin.NET.Core.CryptogramOptions.PrivateKey">
             <summary>
             私钥
             </summary>
@@ -7636,6 +7656,62 @@
             <param name="args"></param>
             <returns></returns>
         </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.Encrypt(System.String)">
+            <summary>
+            加密
+            </summary>
+            <param name="plainText"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.Decrypt(System.String)">
+            <summary>
+            解密
+            </summary>
+            <param name="cipherText"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.SM2Encrypt(System.String)">
+            <summary>
+            SM2加密
+            </summary>
+            <param name="plainText"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.SM2Decrypt(System.String)">
+            <summary>
+            SM2解密
+            </summary>
+            <param name="cipherText"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.SM4EncryptECB(System.String)">
+            <summary>
+            SM4加密(ECB)
+            </summary>
+            <param name="plainText"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.SM4DecryptECB(System.String)">
+            <summary>
+            SM4解密(ECB)
+            </summary>
+            <param name="cipherText"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.SM4EncryptCBC(System.String)">
+            <summary>
+            SM4加密(CBC)
+            </summary>
+            <param name="plainText"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.CryptogramUtil.SM4DecryptCBC(System.String)">
+            <summary>
+            SM4解密(CBC)
+            </summary>
+            <param name="cipherText"></param>
+            <returns></returns>
+        </member>
         <member name="M:Admin.NET.Core.DateTimeUtil.GetBeginTime(System.Nullable{System.DateTime},System.Int32)">
             <summary>
             获取开始时间
@@ -7852,47 +7928,5 @@
             SM工具类
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.SMUtil.SM2Encrypt(System.String)">
-            <summary>
-            SM2加密
-            </summary>
-            <param name="plainText"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.SMUtil.SM2Decrypt(System.String)">
-            <summary>
-            SM2解密
-            </summary>
-            <param name="cipherText"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.SMUtil.SM4EncryptECB(System.String)">
-            <summary>
-            SM4加密(ECB)
-            </summary>
-            <param name="plainText"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.SMUtil.SM4DecryptECB(System.String)">
-            <summary>
-            SM4解密(ECB)
-            </summary>
-            <param name="cipherText"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.SMUtil.SM4EncryptCBC(System.String)">
-            <summary>
-            SM4加密(CBC)
-            </summary>
-            <param name="plainText"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.SMUtil.SM4DecryptCBC(System.String)">
-            <summary>
-            SM4解密(CBC)
-            </summary>
-            <param name="cipherText"></param>
-            <returns></returns>
-        </member>
     </members>
 </doc>

+ 3 - 3
Admin.NET/Admin.NET.Core/Entity/SysUser.cs

@@ -17,11 +17,11 @@ public class SysUser : EntityTenant
     /// <summary>
     /// 密码
     /// </summary>
-    [SugarColumn(ColumnDescription = "密码", Length = 256)]
-    [Required, MaxLength(256)]
+    [SugarColumn(ColumnDescription = "密码", Length = 512)]
+    [Required, MaxLength(512)]
     [System.Text.Json.Serialization.JsonIgnore]
     [JsonIgnore]
-    public virtual string Password { get; set; } = "e10adc3949ba59abbe56e057f20f883e";
+    public virtual string Password { get; set; }
 
     /// <summary>
     /// 真实姓名

+ 19 - 0
Admin.NET/Admin.NET.Core/Enum/CryptogramEnum.cs

@@ -0,0 +1,19 @@
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 密码加密枚举
+/// </summary>
+public enum CryptogramEnum
+{
+    /// <summary>
+    /// MD5
+    /// </summary>
+    [Description("MD5")]
+    MD5 = 0,
+
+    /// <summary>
+    /// SM2(国密)
+    /// </summary>
+    [Description("SM2")]
+    SM2 = 1
+}

+ 8 - 2
Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs

@@ -10,12 +10,18 @@ public enum ErrorCodeEnum
     /// 验证码错误
     /// </summary>
     [ErrorCodeItemMetadata("验证码错误")]
+    D0008,
+
+    /// <summary>
+    /// 账号不存在
+    /// </summary>
+    [ErrorCodeItemMetadata("账号不存在")]
     D0009,
 
     /// <summary>
-    /// 用户名或密码不正确
+    /// 密码不正确
     /// </summary>
-    [ErrorCodeItemMetadata("用户名或密码不正确")]
+    [ErrorCodeItemMetadata("密码不正确")]
     D1000,
 
     /// <summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Option/CryptoOptions.cs → Admin.NET/Admin.NET.Core/Option/CryptogramOptions.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 密码配置选项
 /// </summary>
-public sealed class CryptoOptions : IConfigurableOptions
+public sealed class CryptogramOptions : IConfigurableOptions
 {
     /// <summary>
     /// 密码类型

+ 8 - 6
Admin.NET/Admin.NET.Core/SeedData/SysUserSeedData.cs

@@ -12,14 +12,16 @@ public class SysUserSeedData : ISqlSugarEntitySeedData<SysUser>
     [IgnoreUpdate]
     public IEnumerable<SysUser> HasData()
     {
+        var encryptPasswod = CryptogramUtil.Encrypt("123456");
+
         return new[]
         {
-            new SysUser{ Id=1300000000101, Account="superadmin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="超级管理员", RealName="超级管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, AccountType=AccountTypeEnum.SuperAdmin, Remark="超级管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), TenantId=1300000000001 },
-            new SysUser{ Id=1300000000111, Account="admin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="系统管理员", RealName="系统管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, AccountType=AccountTypeEnum.Admin, Remark="系统管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000101, PosId=1300000000102, TenantId=1300000000001 },
-            new SysUser{ Id=1300000000112, Account="user1", Password="e10adc3949ba59abbe56e057f20f883e", NickName="部门主管", RealName="部门主管", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.User, Remark="部门主管", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000102, PosId=1300000000108, TenantId=1300000000001 },
-            new SysUser{ Id=1300000000113, Account="user2", Password="e10adc3949ba59abbe56e057f20f883e", NickName="部门职员", RealName="部门职员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.User, Remark="部门职员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000103, PosId=1300000000110, TenantId=1300000000001 },
-            new SysUser{ Id=1300000000114, Account="user3", Password="e10adc3949ba59abbe56e057f20f883e", NickName="普通用户", RealName="普通用户", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.User, Remark="普通用户", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000104, PosId=1300000000115, TenantId=1300000000001 },
-            new SysUser{ Id=1300000000115, Account="user4", Password="e10adc3949ba59abbe56e057f20f883e", NickName="其他", RealName="其他", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.None, Remark="普通用户", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000105, PosId=1300000000116, TenantId=1300000000001 },
+            new SysUser{ Id=1300000000101, Account="superadmin", Password=encryptPasswod, NickName="超级管理员", RealName="超级管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, AccountType=AccountTypeEnum.SuperAdmin, Remark="超级管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), TenantId=1300000000001 },
+            new SysUser{ Id=1300000000111, Account="admin", Password=encryptPasswod, NickName="系统管理员", RealName="系统管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, AccountType=AccountTypeEnum.Admin, Remark="系统管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000101, PosId=1300000000102, TenantId=1300000000001 },
+            new SysUser{ Id=1300000000112, Account="user1", Password=encryptPasswod, NickName="部门主管", RealName="部门主管", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.User, Remark="部门主管", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000102, PosId=1300000000108, TenantId=1300000000001 },
+            new SysUser{ Id=1300000000113, Account="user2", Password=encryptPasswod, NickName="部门职员", RealName="部门职员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.User, Remark="部门职员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000103, PosId=1300000000110, TenantId=1300000000001 },
+            new SysUser{ Id=1300000000114, Account="user3", Password=encryptPasswod, NickName="普通用户", RealName="普通用户", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.User, Remark="普通用户", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000104, PosId=1300000000115, TenantId=1300000000001 },
+            new SysUser{ Id=1300000000115, Account="user4", Password=encryptPasswod, NickName="其他", RealName="其他", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.None, Remark="普通用户", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=1300000000105, PosId=1300000000116, TenantId=1300000000001 },
         };
     }
 }

+ 18 - 9
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -62,24 +62,33 @@ public class SysAuthService : IDynamicApiController, ITransient
         {
             // 判断验证码
             if (!_captcha.Validate(input.CodeId.ToString(), input.Code))
-                throw Oops.Oh(ErrorCodeEnum.D0009);
+                throw Oops.Oh(ErrorCodeEnum.D0008);
         }
 
-        var encryptPasswod = MD5Encryption.Encrypt(input.Password);
+        // 账号是否存在
+        var user = await _sysUserRep.AsQueryable().Filter(null, true).FirstAsync(u => u.Account.Equals(input.Account));
+        _ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009);
 
-        // 判断用户名密码
-        var user = await _sysUserRep.AsQueryable().Filter(null, true)
-            .FirstAsync(u => u.Account.Equals(input.Account) && u.Password.Equals(encryptPasswod));
-        _ = user ?? throw Oops.Oh(ErrorCodeEnum.D1000);
+        // 账号是否被冻结
+        if (user.Status == StatusEnum.Disable)
+            throw Oops.Oh(ErrorCodeEnum.D1017);
 
         // 租户是否被禁用
         var tenant = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().GetFirstAsync(u => u.Id == user.TenantId);
         if (tenant.Status == StatusEnum.Disable)
             throw Oops.Oh(ErrorCodeEnum.Z1003);
 
-        // 账号是否被冻结
-        if (user.Status == StatusEnum.Disable)
-            throw Oops.Oh(ErrorCodeEnum.D1017);
+        // 密码是否正确
+        if (CryptogramUtil.CryptoType == CryptogramEnum.MD5.ToString())
+        {
+            if (user.Password != MD5Encryption.Encrypt(input.Password))
+                throw Oops.Oh(ErrorCodeEnum.D1000);
+        }
+        else
+        {
+            if (CryptogramUtil.Decrypt(user.Password) != input.Password)
+                throw Oops.Oh(ErrorCodeEnum.D1000);
+        }
 
         // 单用户登录
         await _sysOnlineUserService.SignleLogin(user.Id);

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -183,7 +183,7 @@ public class SysTenantService : IDynamicApiController, ITransient
         {
             TenantId = tenantId,
             Account = tenant.AdminName,
-            Password = MD5Encryption.Encrypt(password),
+            Password = CryptogramUtil.Encrypt(password),
             NickName = tenant.AdminName,
             Email = tenant.Email,
             Phone = tenant.Phone,
@@ -315,7 +315,7 @@ public class SysTenantService : IDynamicApiController, ITransient
     public async Task ResetPwd(TenantUserInput input)
     {
         var password = await _sysConfigService.GetConfigValue<string>(CommonConst.SysPassword);
-        var encryptPassword = MD5Encryption.Encrypt(password);
+        var encryptPassword = CryptogramUtil.Encrypt(password);
         await _sysUserRep.UpdateSetColumnsTrueAsync(u => new SysUser() { Password = encryptPassword }, u => u.Id == input.UserId);
     }
 

+ 14 - 5
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -64,7 +64,7 @@ public class SysUserService : IDynamicApiController, ITransient
         var password = await _sysConfigService.GetConfigValue<string>(CommonConst.SysPassword);
 
         var user = input.Adapt<SysUser>();
-        user.Password = MD5Encryption.Encrypt(password);
+        user.Password = CryptogramUtil.Encrypt(password);
         var newUser = await _sysUserRep.AsInsertable(user).ExecuteReturnEntityAsync();
         input.Id = newUser.Id;
         await UpdateRoleAndExtOrg(input);
@@ -185,9 +185,18 @@ public class SysUserService : IDynamicApiController, ITransient
     public async Task<int> ChangePwd(ChangePwdInput input)
     {
         var user = await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId);
-        if (MD5Encryption.Encrypt(input.PasswordOld) != user.Password)
-            throw Oops.Oh(ErrorCodeEnum.D1004);
-        user.Password = MD5Encryption.Encrypt(input.PasswordNew);
+        if (CryptogramUtil.CryptoType == CryptogramEnum.MD5.ToString())
+        {
+            if (user.Password != MD5Encryption.Encrypt(input.PasswordOld))
+                throw Oops.Oh(ErrorCodeEnum.D1004);
+        }
+        else
+        {
+            if (CryptogramUtil.Decrypt(user.Password) != input.PasswordOld)
+                throw Oops.Oh(ErrorCodeEnum.D1004);
+        }
+
+        user.Password = CryptogramUtil.Encrypt(input.PasswordNew);
         return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync();
     }
 
@@ -201,7 +210,7 @@ public class SysUserService : IDynamicApiController, ITransient
         var password = await _sysConfigService.GetConfigValue<string>(CommonConst.SysPassword);
 
         var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id);
-        user.Password = MD5Encryption.Encrypt(password);
+        user.Password = CryptogramUtil.Encrypt(password);
         return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync();
     }
 

+ 107 - 0
Admin.NET/Admin.NET.Core/Util/CryptogramUtil.cs

@@ -0,0 +1,107 @@
+using Org.BouncyCastle.Utilities.Encoders;
+
+namespace Admin.NET.Core;
+
+public class CryptogramUtil
+{
+    public static readonly string CryptoType = App.GetConfig<string>("Cryptogram:CryptoType"); // 加密类型
+    public static readonly string PublicKey = App.GetConfig<string>("Cryptogram:PublicKey"); // 公钥
+    public static readonly string PrivateKey = App.GetConfig<string>("Cryptogram:PrivateKey"); // 私钥
+
+    /// <summary>
+    /// 加密
+    /// </summary>
+    /// <param name="plainText"></param>
+    /// <returns></returns>
+    public static string Encrypt(string plainText)
+    {
+        if (CryptoType == CryptogramEnum.MD5.ToString())
+        {
+            return MD5Encryption.Encrypt(plainText);
+        }
+        else if (CryptoType == CryptogramEnum.SM2.ToString())
+        {
+            return SM2Encrypt(plainText);
+        }
+        return plainText;
+    }
+
+    /// <summary>
+    /// 解密
+    /// </summary>
+    /// <param name="cipherText"></param>
+    /// <returns></returns>
+    public static string Decrypt(string cipherText)
+    {
+        if (CryptoType == CryptogramEnum.SM2.ToString())
+        {
+            return SM2Decrypt(cipherText);
+        }
+        return cipherText;
+    }
+
+    /// <summary>
+    /// SM2加密
+    /// </summary>
+    /// <param name="plainText"></param>
+    /// <returns></returns>
+    public static string SM2Encrypt(string plainText)
+    {
+        byte[] sourceData = Encoding.Default.GetBytes(plainText);
+        return SM2Util.Encrypt(Hex.Decode(PublicKey), sourceData);
+    }
+
+    /// <summary>
+    /// SM2解密
+    /// </summary>
+    /// <param name="cipherText"></param>
+    /// <returns></returns>
+    public static string SM2Decrypt(string cipherText)
+    {
+        return Encoding.Default.GetString(SM2Util.Decrypt(Hex.Decode(PrivateKey), Hex.Decode(cipherText)));
+    }
+
+    /// <summary>
+    /// SM4加密(ECB)
+    /// </summary>
+    /// <param name="plainText"></param>
+    /// <returns></returns>
+    public static string SM4EncryptECB(string plainText)
+    {
+        var sm4 = new SM4Util();
+        return sm4.Encrypt_ECB(plainText);
+    }
+
+    /// <summary>
+    /// SM4解密(ECB)
+    /// </summary>
+    /// <param name="cipherText"></param>
+    /// <returns></returns>
+    public static string SM4DecryptECB(string cipherText)
+    {
+        var sm4 = new SM4Util();
+        return sm4.Decrypt_ECB(cipherText);
+    }
+
+    /// <summary>
+    /// SM4加密(CBC)
+    /// </summary>
+    /// <param name="plainText"></param>
+    /// <returns></returns>
+    public static string SM4EncryptCBC(string plainText)
+    {
+        var sm4 = new SM4Util();
+        return sm4.Encrypt_CBC(plainText);
+    }
+
+    /// <summary>
+    /// SM4解密(CBC)
+    /// </summary>
+    /// <param name="cipherText"></param>
+    /// <returns></returns>
+    public static string SM4DecryptCBC(string cipherText)
+    {
+        var sm4 = new SM4Util();
+        return sm4.Decrypt_CBC(cipherText);
+    }
+}

+ 0 - 68
Admin.NET/Admin.NET.Core/Util/SM/SMUtil.cs

@@ -7,74 +7,6 @@ namespace Admin.NET.Core;
 /// </summary>
 public class SMUtil
 {
-    public static string PublicKey = App.GetConfig<string>("Crypto:PublicKey"); // 公钥
-    public static string PrivateKey = App.GetConfig<string>("Crypto:PrivateKey"); // 私钥
-
-    /// <summary>
-    /// SM2加密
-    /// </summary>
-    /// <param name="plainText"></param>
-    /// <returns></returns>
-    public static string SM2Encrypt(string plainText)
-    {
-        byte[] sourceData = Encoding.Default.GetBytes(plainText);
-        return SM2Util.Encrypt(Hex.Decode(PublicKey), sourceData);
-    }
-
-    /// <summary>
-    /// SM2解密
-    /// </summary>
-    /// <param name="cipherText"></param>
-    /// <returns></returns>
-    public static string SM2Decrypt(string cipherText)
-    {
-        return Encoding.Default.GetString(SM2Util.Decrypt(Hex.Decode(PrivateKey), Hex.Decode(cipherText)));
-    }
-
-    /// <summary>
-    /// SM4加密(ECB)
-    /// </summary>
-    /// <param name="plainText"></param>
-    /// <returns></returns>
-    public static string SM4EncryptECB(string plainText)
-    {
-        var sm4 = new SM4Util();
-        return sm4.Encrypt_ECB(plainText);
-    }
-
-    /// <summary>
-    /// SM4解密(ECB)
-    /// </summary>
-    /// <param name="cipherText"></param>
-    /// <returns></returns>
-    public static string SM4DecryptECB(string cipherText)
-    {
-        var sm4 = new SM4Util();
-        return sm4.Decrypt_ECB(cipherText);
-    }
-
-    /// <summary>
-    /// SM4加密(CBC)
-    /// </summary>
-    /// <param name="plainText"></param>
-    /// <returns></returns>
-    public static string SM4EncryptCBC(string plainText)
-    {
-        var sm4 = new SM4Util();
-        return sm4.Encrypt_CBC(plainText);
-    }
-
-    /// <summary>
-    /// SM4解密(CBC)
-    /// </summary>
-    /// <param name="cipherText"></param>
-    /// <returns></returns>
-    public static string SM4DecryptCBC(string cipherText)
-    {
-        var sm4 = new SM4Util();
-        return sm4.Decrypt_CBC(cipherText);
-    }
-
     public static string StrToHex(string str)
     {
         return Encoding.ASCII.GetString(Hex.Encode(Encoding.UTF8.GetBytes(str))).ToUpper();

+ 1 - 0
Admin.NET/Admin.NET.Web.Core/ProjectOptions.cs

@@ -26,6 +26,7 @@ public static class ProjectOptions
         services.AddConfigurableOptions<CodeGenOptions>();
         services.AddConfigurableOptions<EmailOptions>();
         services.AddConfigurableOptions<OAuthOptions>();
+        services.AddConfigurableOptions<CryptogramOptions>();
         //services.AddConfigurableOptions<IpRateLimitingOptions>();
         //services.AddConfigurableOptions<IpRateLimitPoliciesOptions>();
         //services.AddConfigurableOptions<ClientRateLimitingOptions>();