Prechádzať zdrojové kódy

实现 AES 解密并更新相关引用和常量

在 `IdentityController.cs` 中添加了 `using NETCore.Encrypt;` 引用,并定义了 AES 密钥和 IV 的常量 `AesKey` 和 `AesIv`。在 `Decrypt` 方法中实现了 AES 解密逻辑,替换了原来的 `NotImplementedException` 异常。

在 `JsonDefaults.cs` 中添加了 `DefaultJsonSerializerOptionsWithCamelCase` 静态属性,用于支持驼峰命名法的 JSON 序列化选项。
xf 1 mesiac pred
rodič
commit
6b59e9ad2b

+ 7 - 1
src/Hotline.Api/Controllers/IdentityController.cs

@@ -15,6 +15,7 @@ using XF.Domain.Constants;
 using XF.Domain.Exceptions;
 using Hotline.Share.Dtos.Snapshot;
 using Swashbuckle.AspNetCore.Annotations;
+using NETCore.Encrypt;
 
 namespace Hotline.Api.Controllers;
 
@@ -62,6 +63,9 @@ Q9PP8NTEmKqdI3WVFYqW/OlOFC6sjiscTOOn9Tc5Mrcn8ocCjAPjkhkCCVRMiJnv
 jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
 -----END RSA PRIVATE KEY-----";
 
+    private const string AesKey = "qlzeJrbj0CPkHdFBvEAxX47Y4nCbBPZW";
+    private const string AesIv = "JxeDP0sgnPJdH9fE";
+
     public IdentityController(
         IOptionsSnapshot<AppConfiguration> appOptions,
         IIdentityAppService identityAppService,
@@ -201,6 +205,8 @@ jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
     private LoginWithSignatureRequest? Decrypt(string signature)
     {
         if (string.IsNullOrEmpty(signature)) return null;
-        throw new NotImplementedException();
+        var decrypted = EncryptProvider.AESDecrypt(signature, AesKey, AesIv);
+        return System.Text.Json.JsonSerializer.Deserialize<LoginWithSignatureRequest>(decrypted,
+            JsonDefaults.DefaultJsonSerializerOptionsWithCamelCase);
     }
 }

+ 15 - 11
src/Hotline.Api/Controllers/TestController.cs

@@ -1,4 +1,5 @@
 using System.Text;
+using System.Text.Json;
 using DotNetCore.CAP;
 using Hotline.Ai.Quality;
 using Hotline.Application.CallCenter;
@@ -31,6 +32,7 @@ using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Home;
+using Hotline.Share.Dtos.Identity;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Realtime;
 using Hotline.Share.Dtos.Snapshot;
@@ -55,6 +57,7 @@ using SqlSugar;
 using XC.RSAUtil;
 using XF.Domain.Authentications;
 using XF.Domain.Cache;
+using XF.Domain.Constants;
 using XF.Domain.Filters;
 using XF.Domain.Locks;
 using XF.Domain.Queues;
@@ -1293,23 +1296,24 @@ public class TestController : BaseController
     {
         var aesKey = EncryptProvider.CreateAesKey();
 
-        //var key = aesKey.Key;
-        //var iv = aesKey.IV;
+        var key = aesKey.Key;
+        var iv = aesKey.IV;
 
-        var key = "qlzeJrbj0CPkHdFBvEAxX47Y4nCbBPZW";
-        var iv = "JxeDP0sgnPJdH9fE";
+        //var key = "qlzeJrbj0CPkHdFBvEAxX47Y4nCbBPZW";
+        //var iv = "JxeDP0sgnPJdH9fE";
 
-        var str = "123abc";
-        var encrypted = EncryptProvider.AESEncrypt(str, key);
+        var encrypted = EncryptProvider.AESEncrypt(dto.Str, dto.Key);
+        
         //带加密向量
-        var encrypted1 = EncryptProvider.AESEncrypt(str, key, iv);
+        var encrypted1 = EncryptProvider.AESEncrypt(dto.Str, dto.Key, dto.Iv);
 
-        var decrypted = EncryptProvider.AESDecrypt(encrypted, key);
+        var decrypted = EncryptProvider.AESDecrypt(dto.Encrypted, dto.Key);
         //带加密向量
-        var decrypted1 = EncryptProvider.AESDecrypt(encrypted1, key, iv);
+        var decrypted1 = EncryptProvider.AESDecrypt(dto.Encrypted, dto.Key, dto.Iv);
 
-        var strString = dto.AppId + dto.Timestamp;
-        return dto.AppId + EncryptProvider.AESEncrypt(strString, dto.Secret, dto.AppId);
+        //var strString = dto.AppId + dto.Timestamp;
+        //return dto.AppId + EncryptProvider.AESEncrypt(strString, dto.Secret, dto.AppId);
+        return $"key: {key}, iv: {iv}";
     }
 
     /// <summary>

+ 17 - 12
src/Hotline.Share/Dtos/Home/CheckTokenDto.cs

@@ -7,18 +7,23 @@ using System.Threading.Tasks;
 namespace Hotline.Share.Dtos.Home;
 public class CheckTokenDto
 {
-    /// <summary>
-    /// AppId
-    /// </summary>
-    public string AppId { get; set; }
+    ///// <summary>
+    ///// AppId
+    ///// </summary>
+    //public string AppId { get; set; }
 
-    /// <summary>
-    /// Secret
-    /// </summary>
-    public string Secret { get; set; }
+    ///// <summary>
+    ///// Secret
+    ///// </summary>
+    //public string Secret { get; set; }
 
-    /// <summary>
-    /// timestamp
-    /// </summary>
-    public long Timestamp { get; set; }
+    ///// <summary>
+    ///// timestamp
+    ///// </summary>
+    //public long Timestamp { get; set; }
+
+    public string Key { get; set; }
+    public string Iv { get; set; }
+    public string Str { get; set; }
+    public string Encrypted { get; set; }
 }

+ 5 - 0
src/XF.Domain/Constants/JsonDefaults.cs

@@ -15,5 +15,10 @@ namespace XF.Domain.Constants
         {
             Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs)
         };
+
+        public static JsonSerializerOptions DefaultJsonSerializerOptionsWithCamelCase = new JsonSerializerOptions
+        {
+            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
+        };
     }
 }