From af1cb3ecd0f4b0589e00b28f7f9edccf39e6e12b Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期四, 10 九月 2020 16:15:11 +0800 Subject: [PATCH] 202009101 --- HDL_ON/DAL/Net/MqttCommon.cs | 721 +++++++++++++------------------------------------------ 1 files changed, 174 insertions(+), 547 deletions(-) diff --git a/HDL_ON/DAL/Net/MqttCommon.cs b/HDL_ON/DAL/Net/MqttCommon.cs index 5b097f1..a2d2d5c 100644 --- a/HDL_ON/DAL/Net/MqttCommon.cs +++ b/HDL_ON/DAL/Net/MqttCommon.cs @@ -1,569 +1,196 @@ 锘縰sing System.Collections.Generic; using System; -using MQTTnet.Client; -using System.Threading.Tasks; using System.Text; using System.Security.Cryptography; -using MQTTnet; namespace HDL_ON.DAL.Net { - public static class MqttCommon + + public class RemoteRequestParameters { - static string mqttEncryptKey = ""; - static string checkGatewayTopicBase64 = ""; - static RemoteMACInfo CurRemoteMACInfo = null; + public string RequestVersion; + public int RequestSource; + public string LoginAccessToken; + public int RequestProtocolType; + public int HdlGatewayGatewayType = 0; + public bool IsRedirectSelectEmqServer = false; /// <summary> - /// 鎵嬫満鏍囪瘑 + /// 骞冲彴绫诲瀷瀛楃涓� /// </summary> - static Guid currentGuid = Guid.NewGuid(); - + public string PlatformStr; /// <summary> - /// 澶栫綉鐨凪QTT鏄惁姝e湪杩炴帴 + /// 鍙戝竷涓婚璐熻浇 /// </summary> - static object isConnecting = false.ToString(); - /// <summary> - /// 杩滅▼MqttClient - /// </summary> - public static IMqttClient RemoteMqttClient; + public string PublishPayloadJsonStr; - static bool thisShowTip = true; - - public static async System.Threading.Tasks.Task Close(bool RemoveRemoteMqttClient = false) - { - try - { - if (RemoteMqttClient != null) - { - //thisShowTip = true; - await RemoteMqttClient.DisconnectAsync(); - } - if (RemoveRemoteMqttClient) - { - RemoteMqttClient = null; - } - CommonPage.IsRemote = false; - } - catch { } - } - - static DateTime dateTime = DateTime.MinValue; - - /// <summary> - /// 鍚姩杩滅▼Mqtt - /// </summary> - public static async Task StartCloudMqtt() - { - /* - try - { - Application.RunOnMainThread(() => - { - if (5 < (DateTime.Now - dateTime).TotalSeconds) - { - return; - } - dateTime = DateTime.Now; - }); - if (!MainPage.LoginUser.IsLogin) - { - isConnecting = false.ToString(); - return; - } - while (isConnecting.ToString() == true.ToString()) - { - if (5 < (DateTime.Now - dateTime).TotalSeconds) - { - break; - } - await System.Threading.Tasks.Task.Delay(500); - } - lock (isConnecting) - { - if (isConnecting.ToString() == true.ToString()) - { - return; - } - isConnecting = true.ToString(); - if (RemoteMqttClient != null) - { - MainPage.Log($"RemoteMqttClient.IsConnected: {RemoteMqttClient.IsConnected}"); - } - //if (RemoteMqttClient != null && RemoteMqttClient.IsConnected) { - // return; - //} - - new System.Threading.Thread(async () => - { - try - { - //鏂紑鍚庨噸鏂伴摼鎺ラ渶瑕侀噸鏂扮櫥褰曡幏鍙栬繛鎺ョ殑瀵嗙爜 - var requestObj = new LoginObj() { Account = MainPage.LoginUser.AccountString.ToLower(), Password = MainPage.LoginUser.Password, Company = 1 }; - var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj); - var tempResult = HttpServerRequest.RequestHttps("Login", requestJson, ""); - if (tempResult == null) - { - //---------- - return; - } - var responsePack = tempResult.ResponseData; - var dictrionaryResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(tempResult.ResponseData.ToString()); - var mqttRequestPar = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginRes>(tempResult.ResponseData.ToString()); - //杩樻湁绉嶆儏鍐垫槸鍚屼竴涓狪D 鏈夊涓澶囩敤杩欎釜id杩炴帴锛堜細瀵艰嚧涓柇锛� - //mqttEncryptKey = dictrionaryResult ["HdlOnMqttKey"]?.ToString (); - var url = dictrionaryResult["ConnectMqttBrokerLoadSubDomain"]?.ToString(); - var clientId = dictrionaryResult["ConnectMqttClientId"]?.ToString(); - var username = dictrionaryResult["ConnectMqttBrokerUserName"]?.ToString(); - var passwordRemote = dictrionaryResult["ConnectMqttBrokerPwd"]?.ToString(); - - if (RemoteMqttClient == null) - { - var requestObj3 = new GatewayByRegionListObj() { RegionID = UserConfig.Instance.CurrentRegion.RegionID }; - MainPage.Log("Remote mqtt get Region MAC : " + UserConfig.Instance.CurrentRegion.RegionID); - var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj3); - var revertObj3 = HttpServerRequest.RequestHttps("GatewayByRegionList", requestJson3, true); - if (revertObj3.DB_ResidenceData.residenceData.residecenInfo - { - var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GatewayRes>>(revertObj3.ResponseData.ToString()); - var gatewayList = responseDataObj; - if (gatewayList != null && gatewayList.Count > 0) - { - UserConfig.Instance.CurrentRegion.MAC = gatewayList[0].MAC; - UserConfig.Instance.SaveUserConfig(); - MainPage.Log("Remote mqtt get Region MAC : " + gatewayList[0].MAC); - } - } - else - { - MainPage.Log("Remote mqtt get Region MAC Erorr !!"); - } - - //(2)鍒涘缓Mqtt瀹㈡埛绔� - RemoteMqttClient = new MqttFactory().CreateMqttClient(); - //(3)褰揫杩炴帴浜戠鐨凪qtt鎴愬姛鍚嶿鎴栬�匸浠ュ強鍚庨潰App閫氳繃浜戠Mqtt杞彂鏁版嵁缁欑綉鍏虫垚鍔熷悗],澶勭悊鎺ユ敹鍒颁簯绔暟鎹寘鍝嶅簲鏃跺湪mqttServerClient_ApplicationMessageReceived杩欎釜鏂规硶澶勭悊 - RemoteMqttClient.UseApplicationMessageReceivedHandler(async e => - { - if (isConnecting.ToString() == true.ToString()) - isConnecting = false.ToString(); - var aesDecryptTopic = e.ApplicationMessage.Topic; - var aesDecryptPayload = e.ApplicationMessage.Payload; - MainPage.Log(aesDecryptTopic); - - if (aesDecryptTopic == $"NotifyBusGateWayInfoChagne/{CurRemoteMACInfo.md5_mac_string}") - {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey - //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛� - var gatewayListUrl = @"https://developer.hdlcontrol.com/Center/Center/GetGatewayPagger"; //App銆丅uspro杞欢鐧诲綍鍚庤幏鍙栫綉鍏冲垪琛� http 璇锋眰 - var gatewayListRequestPar = new RemoteRequestParameters() { Mac = CurRemoteMACInfo.mac, LoginAccessToken = mqttRequestPar.Token, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 }; - var gatewayListRequestResult = HttpServerRequest.RequestHttps("", Newtonsoft.Json.JsonConvert.SerializeObject(gatewayListRequestPar), false, gatewayListUrl); - var gatewayListRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttRemoteInfo>(gatewayListRequestResult.ResponseData.ToString()); - if (gatewayListRequestResult_Obj != null && gatewayListRequestResult_Obj.pageData.Count > 0) - { - CurRemoteMACInfo.aesKey = gatewayListRequestResult_Obj.pageData[0].aesKey; - mqttEncryptKey = CurRemoteMACInfo.aesKey; - } - - } - - if (aesDecryptTopic == "YouIpAndPortNoRecord" || aesDecryptTopic == "DecryptFail") - {// --> 浣犲綋鍓嶇殑IP鍙婄鍙e湪浜戠涓嶅瓨鍦�,璇烽噸鏂扮櫥褰曡繛鎺ヤ笅! - await Close(true); - //await MqttCheckGateway (); - } - else if (aesDecryptTopic == @"/BeingSqueezedOffline") - { - try - { - - } - catch (Exception ex) - { - MainPage.Log(ex.Message); - } - finally - { - - } - } - else - { - if (!string.IsNullOrEmpty(mqttEncryptKey)) - { - aesDecryptTopic = Shared.Securitys.EncryptionService.AesDecryptTopic(e.ApplicationMessage.Topic, mqttEncryptKey); - aesDecryptPayload = Shared.Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, mqttEncryptKey); - } - else - { - aesDecryptTopic = e.ApplicationMessage.Topic; - aesDecryptPayload = e.ApplicationMessage.Payload; - } - } - MainPage.Log($"Des Topic={aesDecryptTopic}"); - - - var packet = new Packet(); - packet.Bytes = aesDecryptPayload; - packet.Manager(); - - }); - - RemoteMqttClient.UseDisconnectedHandler(e => - { - if (thisShowTip) - { - if (CommonPage.IsRemote) - { - //---------- - } - } - else - { - thisShowTip = true; - } - }); - RemoteMqttClient.UseConnectedHandler(async e => - { - if (CurRemoteMACInfo != null) - { - if (CurRemoteMACInfo.isValid == "InValid") - { - //---------- - } - else - { - CommonPage.IsRemote = true; - //---------- - } - } - }); - } - - if (clientId == null || username == null || passwordRemote == null) - { - return; - } - - if (tempResult == null) - { - //---------- - return; - } - //--绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟 - var mqttInfoUrl = @"https://developer.hdlcontrol.com/Center/Center/GetConnMqttInfo";//鑾峰彇杩炴帴杩滅▼浜戠Emq Mqtt 鏈嶅姟鍣ㄨ繛鎺ヤ俊鎭� - var mqttInfoRequestPar = new RemoteRequestParameters() { LoginAccessToken = mqttRequestPar.Token, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 }; - var mqttInfoRequestResult = HttpServerRequest.RequestHttps("", Newtonsoft.Json.JsonConvert.SerializeObject(mqttInfoRequestPar), false, mqttInfoUrl); - - if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null) - { - try - { - var mqttInfoRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo>(mqttInfoRequestResult.ResponseData.ToString()); - if (mqttInfoRequestResult_Obj != null) - { - url = mqttInfoRequestResult_Obj.connEmqDomainPort; - clientId = mqttInfoRequestResult_Obj.connEmqClientId; - username = mqttInfoRequestResult_Obj.connEmqUserName; - passwordRemote = mqttInfoRequestResult_Obj.connEmqPwd; - //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛� - var gatewayListUrl = @"https://developer.hdlcontrol.com/Center/Center/GetGatewayPagger"; //App銆丅uspro杞欢鐧诲綍鍚庤幏鍙栫綉鍏冲垪琛� http 璇锋眰 - var gatewayListRequestPar = new RemoteRequestParameters() { LoginAccessToken = mqttRequestPar.Token, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 }; - var gatewayListRequestResult = HttpServerRequest.RequestHttps("", Newtonsoft.Json.JsonConvert.SerializeObject(gatewayListRequestPar), false, gatewayListUrl); - var gatewayListRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttRemoteInfo>(gatewayListRequestResult.ResponseData.ToString()); - //--鎵惧嚭鏄惁瀛樺湪鍖归厤褰撳墠浣忓畢鐨刴ac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆� - CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData.Find((obj) => obj.mac == UserConfig.Instance.CurrentRegion.MAC); - if (CurRemoteMACInfo != null) - { - CurRemoteMACInfo.LoginAccessToken = mqttRequestPar.Token; - mqttEncryptKey = CurRemoteMACInfo.aesKey; - var options1 = new MQTTnet.Client.Options.MqttClientOptionsBuilder() - .WithClientId(clientId) - .WithTcpServer(url.Split(':')[1].Substring("//".Length), int.Parse(url.Split(':')[2])) - .WithCredentials(username, passwordRemote) - .WithCleanSession() - .WithCommunicationTimeout(new TimeSpan(0, 0, 10)) - .Build(); - await Close(); - await RemoteMqttClient.ConnectAsync(options1); - await MqttRemoteSend(new byte[] { 0 }, 1); - await MqttRemoteSend(new byte[] { 0 }, 2); - } - } - } - catch { } - } - } - catch (Exception ex) - { - Application.RunOnMainThread(() => - { - if (MqttCommon.RemoteMqttClient != null) - { - MqttCommon.RemoteMqttClient.Dispose(); - } - if (MqttCommon.RemoteMqttClient != null) - { - MqttCommon.RemoteMqttClient = null; - } - }); - } - finally - { - isConnecting = false.ToString(); - //---------- - } - }) - { IsBackground = true }.Start(); - } - } - catch (Exception ex) - { - MainPage.Log("============>" + ex.Message); - } - finally - { - isConnecting = false.ToString(); - } - - */ - } - - /// <summary> - /// - /// </summary> - /// <param name="message">闄勫姞鏁版嵁鍖�</param> - /// <param name="optionType">鎿嶄綔绫诲瀷锛�0=缃戝叧鎺у埗锛�1=璁㈤槄缃戝叧鏁版嵁;2=璁㈤槄缃戝叧涓婄嚎鏁版嵁</param> - /// <returns></returns> - public static async Task MqttRemoteSend(byte[] message, int optionType = 0) - { - try - { - if (RemoteMqttClient == null || !RemoteMqttClient.IsConnected) - { - await StartCloudMqtt(); - } - if (!RemoteMqttClient.IsConnected) - { - return; - } - var topicName = "";//@"/" + MainPage.LoginUser.AccountString.ToLower() + @"/" + currentGuid;//+ @"/" + UserConfig.Instance.CurrentRegion.MAC.Replace(".", "") - switch (optionType) - { - case 0: - if (!string.IsNullOrEmpty(mqttEncryptKey)) - { - topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/OldON"; - } - else - { - topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/NewON"; - } - //base64鍔犲瘑 - var messageSend = Shared.Securitys.EncryptionService.AesEncryptPayload(message, mqttEncryptKey); - var m = new MqttApplicationMessage { Topic = topicName, Payload = messageSend, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce }; - await RemoteMqttClient?.PublishAsync(m); - break; - case 1: - topicName = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/#"; - await RemoteMqttClient?.SubscribeAsync(topicName); - break; - case 2: - var macStr = CurRemoteMACInfo.mac.ToUpper(); - char[] cArrs = macStr.ToCharArray(); - Array.Reverse(cArrs); - var sss = string.Join(string.Empty, cArrs); - - using (var provider = new MD5CryptoServiceProvider()) - { - byte[] buffer = provider.ComputeHash(Encoding.Default.GetBytes(sss)); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < buffer.Length; i++) - { - builder.Append(buffer[i].ToString("x2")); - } - CurRemoteMACInfo.md5_mac_string = builder.ToString().ToUpper(); - } - - topicName = $"/NotifyBusGateWayInfoChagne/{CurRemoteMACInfo.md5_mac_string}"; - await RemoteMqttClient?.SubscribeAsync(topicName); - break; - } - } - catch (Exception e) - { - isConnecting = false.ToString(); - } - } + public string Mac = ""; + public string GroupName = ""; } -} -public class RemoteRequestParameters -{ - public string RequestVersion; - public int RequestSource; - public string LoginAccessToken; - public int RequestProtocolType; - - public string Mac = ""; - public string GroupName = ""; -} - -public class MqttRemoteInfo -{ - public List<RemoteMACInfo> pageData; - - public int pageIndex = 0; - public int pageSize = 10; - public int totalCount = 3; - public int totalPages = 1; - public bool hasPreviousPage = false; - public bool hasNextPage = false; -} - -public class MqttInfo -{ - public string connEmqDomainPort; - public string connEmqClientId; - public string connEmqUserName; - public string connEmqPwd; -} - -public class RemoteMACInfo -{ - public string mac; - public string macMark; - public string isValid; - public string aesKey; - public bool isNewBusproGateway; - public string groupName; - public string projectName; - public string userName; - - //app鑷畾涔夋暟鎹� - public string md5_mac_string; - public string LoginAccessToken; -} - -namespace Shared.Securitys -{ - public partial class EncryptionService + public class MqttRemoteInfo { + public List<RemoteMACInfo> pageData; - #region 鍔犲瘑 - /// <summary> - /// 鍔犲瘑涓婚涓築ase64 - /// </summary> - /// <param name="pToEncrypt"></param> - /// <param name="key"></param> - /// <returns></returns> - public static string AesEncryptTopic(string pToEncrypt, string key) - { - if (string.IsNullOrEmpty(pToEncrypt)) return null; - if (string.IsNullOrEmpty(key)) return pToEncrypt; - //闇�瑕佸姞瀵嗗唴瀹圭殑鏄庢枃娴� - Byte[] toEncryptArray = Encoding.UTF8.GetBytes(pToEncrypt); + public int pageIndex = 0; + public int pageSize = 10; + public int totalCount = 3; + public int totalPages = 1; + public bool hasPreviousPage = false; + public bool hasNextPage = false; + } - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - RijndaelManaged rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; + public class MqttInfo + { + public string connEmqDomainPort; + public string connEmqClientId; + public string connEmqUserName; + public string connEmqPwd; - //鍒涘缓AES鍔犲瘑鍣ㄥ璞� - ICryptoTransform cTransform = rm.CreateEncryptor(); - - //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍 - Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - - //灏咥ES鐢熸垚鐨勫瘑鏂囧瓧鑺傛暟缁勮浆鎴怋ase64瀛楃涓� - return Convert.ToBase64String(resultArray, 0, resultArray.Length); - } - - - /// <summary> - /// 鍔犲瘑璐熻浇涓轰簩杩涘埗娴� - /// </summary> - /// <param name="toEncryptArray"></param> - /// <param name="key"></param> - /// <returns></returns> - public static byte[] AesEncryptPayload(byte[] toEncryptArray, string key) - { - if (string.IsNullOrEmpty(key)) return toEncryptArray; - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - var rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; - - //鍒涘缓AES鍔犲瘑鍣ㄥ璞� - var cTransform = rm.CreateEncryptor(); - //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍 - return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - } - #endregion - - - #region 瑙e瘑 - /// <summary> - /// 瑙e瘑涓婚鏁版嵁 - /// </summary> - /// <param name="pToDecrypt"></param> - /// <param name="key"></param> - /// <returns></returns> - public static string AesDecryptTopic(string pToDecrypt, string key) - { - //AES瀵嗘枃Base64杞垚瀛楃涓� - Byte[] toEncryptArray = Convert.FromBase64String(pToDecrypt); - - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - RijndaelManaged rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; - - //鍒涘缓AES瑙e瘑鍣ㄥ璞� - ICryptoTransform cTransform = rm.CreateDecryptor(); - - //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁� - Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - - //杞垚瀛楃涓� - return Encoding.UTF8.GetString(resultArray); - } - - /// <summary> - /// 閲囩敤Aes瑙e瘑璐熻浇鏁版嵁 - /// </summary> - /// <param name="toEncryptArray"></param> - /// <param name="key"></param> - /// <returns></returns> - public static byte[] AesDecryptPayload(byte[] toEncryptArray, string key) - { - //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) - var rm = new RijndaelManaged - { - Key = Encoding.UTF8.GetBytes(key), - IV = Encoding.UTF8.GetBytes(key), - Mode = CipherMode.CBC, - Padding = PaddingMode.PKCS7 - }; - - //鍒涘缓AES瑙e瘑鍣ㄥ璞� - var cTransform = rm.CreateDecryptor(); - - //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁� - return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); - } - #endregion - + public List<RemoteMACInfo> AccountAllGateways; } -} + + public class RemoteMACInfo + { + public string mac; + public string macMark; + public string isValid; + public string aesKey; + public bool isNewBusproGateway; + public string groupName; + public string projectName; + public string userName; + + public string clientId; + + //app鑷畾涔夋暟鎹� + public string md5_mac_string; + public string LoginAccessToken; + } + + namespace Shared.Securitys + { + public partial class EncryptionService + { + + #region 鍔犲瘑 + /// <summary> + /// 鍔犲瘑涓婚涓築ase64 + /// </summary> + /// <param name="pToEncrypt"></param> + /// <param name="key"></param> + /// <returns></returns> + public static string AesEncryptTopic(string pToEncrypt, string key) + { + if (string.IsNullOrEmpty(pToEncrypt)) return null; + if (string.IsNullOrEmpty(key)) return pToEncrypt; + //闇�瑕佸姞瀵嗗唴瀹圭殑鏄庢枃娴� + Byte[] toEncryptArray = Encoding.UTF8.GetBytes(pToEncrypt); + + //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) + RijndaelManaged rm = new RijndaelManaged + { + Key = Encoding.UTF8.GetBytes(key), + IV = Encoding.UTF8.GetBytes(key), + Mode = CipherMode.CBC, + Padding = PaddingMode.PKCS7 + }; + + //鍒涘缓AES鍔犲瘑鍣ㄥ璞� + ICryptoTransform cTransform = rm.CreateEncryptor(); + + //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍 + Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + + //灏咥ES鐢熸垚鐨勫瘑鏂囧瓧鑺傛暟缁勮浆鎴怋ase64瀛楃涓� + return Convert.ToBase64String(resultArray, 0, resultArray.Length); + } + + + /// <summary> + /// 鍔犲瘑璐熻浇涓轰簩杩涘埗娴� + /// </summary> + /// <param name="toEncryptArray"></param> + /// <param name="key"></param> + /// <returns></returns> + public static byte[] AesEncryptPayload(byte[] toEncryptArray, string key) + { + if (string.IsNullOrEmpty(key)) return toEncryptArray; + //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) + var rm = new RijndaelManaged + { + Key = Encoding.UTF8.GetBytes(key), + IV = Encoding.UTF8.GetBytes(key), + Mode = CipherMode.CBC, + Padding = PaddingMode.PKCS7 + }; + + //鍒涘缓AES鍔犲瘑鍣ㄥ璞� + var cTransform = rm.CreateEncryptor(); + //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍 + return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + } + #endregion + + + #region 瑙e瘑 + /// <summary> + /// 瑙e瘑涓婚鏁版嵁 + /// </summary> + /// <param name="pToDecrypt"></param> + /// <param name="key"></param> + /// <returns></returns> + public static string AesDecryptTopic(string pToDecrypt, string key) + { + //AES瀵嗘枃Base64杞垚瀛楃涓� + Byte[] toEncryptArray = Convert.FromBase64String(pToDecrypt); + + //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) + RijndaelManaged rm = new RijndaelManaged + { + Key = Encoding.UTF8.GetBytes(key), + IV = Encoding.UTF8.GetBytes(key), + Mode = CipherMode.CBC, + Padding = PaddingMode.PKCS7 + }; + + //鍒涘缓AES瑙e瘑鍣ㄥ璞� + ICryptoTransform cTransform = rm.CreateDecryptor(); + + //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁� + Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + + //杞垚瀛楃涓� + return Encoding.UTF8.GetString(resultArray); + } + + /// <summary> + /// 閲囩敤Aes瑙e瘑璐熻浇鏁版嵁 + /// </summary> + /// <param name="toEncryptArray"></param> + /// <param name="key"></param> + /// <returns></returns> + public static byte[] AesDecryptPayload(byte[] toEncryptArray, string key) + { + //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�) + var rm = new RijndaelManaged + { + Key = Encoding.UTF8.GetBytes(key), + IV = Encoding.UTF8.GetBytes(key), + Mode = CipherMode.CBC, + Padding = PaddingMode.PKCS7 + }; + + //鍒涘缓AES瑙e瘑鍣ㄥ璞� + var cTransform = rm.CreateDecryptor(); + + //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁� + return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + } + #endregion + + + } + } +} \ No newline at end of file -- Gitblit v1.8.0