From d68d94ae29987d123c5c4e207ee65c713052348c Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期四, 23 九月 2021 14:40:49 +0800
Subject: [PATCH] 2021-09-23 1.增加本地加密通信

---
 HDL_ON/DAL/DriverLayer/Control.cs |  108 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 95 insertions(+), 13 deletions(-)

diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index d493641..09db486 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -63,7 +63,19 @@
         /// 鏄惁鎼滅储鏈湴缃戝叧鎴愬姛
         /// </summary>
         public bool IsSearchLocalGatewaySuccessful = false;
-      
+        /// <summary>
+        /// 鏄惁鏈湴鍔犲瘑锛岀洰鍓嶅彧瀵笰缃戝叧鏈夌敤
+        /// </summary>
+        public bool IsLocalEncrypt;
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鏈湴鍔犲瘑骞朵笖鍔犲瘑key涓嶄负绌�
+        /// </summary>
+        public bool IsLocalEncryptAndGetAesKey {
+            get {
+                return IsLocalEncrypt && (!string.IsNullOrEmpty(DB_ResidenceData.Instance.CurrentRegion.localSecret));
+            }
+        }
+
         bool _GatewayOnline_Local = false;
         /// <summary>
         /// 缃戝叧鍦ㄧ嚎-灞�鍩熺綉
@@ -689,15 +701,45 @@
         /// <summary>
         /// 杞崲鍙戦�佹暟鎹�
         /// </summary>
-        public byte[] ConvertSendBodyData(string topic, string bodyDataString)
+        /// <param name="topic">涓婚</param>
+        /// <param name="bodyDataString">body鍐呭鏁版嵁</param>
+        /// <param name="isEncryption">鏄惁瑕佸body鍔犲瘑</param>
+        /// <returns></returns>
+        public byte[] ConvertSendBodyData(string topic, string bodyDataString, bool isEncryption = true)
         {
-            string topicString = "Topic:" + topic + "\r\n";
-            byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString);
-            string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
+            //string topicString = "Topic:" + topic + "\r\n";
+            //byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString);
+            //string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
 
-            string sendDataString = topicString + lengthString + bodyDataString;
-            byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString);
-            MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
+            //string sendDataString = topicString + lengthString + bodyDataString;
+            //byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString);
+            //MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
+
+            //***************************************************************
+            //2021-09-23 澧炲姞鏈湴閫氫俊鍔犲瘑澶勭悊
+            //1.鎷兼帴澶�
+            string topicString = "Topic:" + topic + "\r\n";
+            //2.Body瀛楃涓茶浆涓篵yte鏁扮粍
+            byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString);
+            //鍒ゆ柇鏄惁闇�鍔犲瘑Body鏁版嵁
+            if (isEncryption && IsLocalEncryptAndGetAesKey)
+            {
+                bodyBytes = Securitys.EncryptionService.AesEncryptPayload(bodyBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
+                //bodyDataString = Encoding.UTF8.GetString(bodyBytes);
+                //MainPage.Log($"杞崲HDL-Link鏁版嵁 鍔犲瘑key锛�" + DB_ResidenceData.Instance.CurrentRegion.localSecret);
+            }
+            //3.鎷兼帴body鐨凩ength闀垮害鏁版嵁
+            string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
+            string topicAndLengthString = topicString + lengthString;
+            byte[] topicAndLengthBytes = Encoding.ASCII.GetBytes(topicAndLengthString);
+            //4.鎷兼帴鍚堝苟 Topic 鍜� body鐨刡yte鏁扮粍鏁版嵁
+            byte[] sendDataBytes = new byte[topicAndLengthBytes.Length + bodyBytes.Length];
+            topicAndLengthBytes.CopyTo(sendDataBytes, 0);
+            bodyBytes.CopyTo(sendDataBytes, topicAndLengthBytes.Length);
+
+            //var sendDataString = Encoding.UTF8.GetString(sendDataBytes);
+            //MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
+            //***************************************************************
 
             return sendDataBytes;
         }
@@ -708,15 +750,19 @@
         public void ConvertReceiveData(byte[] receiveBytes)
         {
             var reString = Encoding.UTF8.GetString(receiveBytes);
-            AnalysisReceiveData(reString);
+            AnalysisReceiveData(reString, receiveBytes);
         }
         /// <summary>
         /// 杞崲鎺ユ敹鍒扮殑鏁版嵁
         /// </summary>
+        /// <param name="receiveString">杞琒tring鍚庣殑鏁版嵁</param>
+        /// <param name="originalReceiveBytes"鍘熷Bytes鏁版嵁</param>
         /// <returns></returns>
-        public LocalCommunicationData AnalysisReceiveData(string receiveString)
+        public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes)
         {
             LocalCommunicationData receiveObj = new LocalCommunicationData();
+
+            MainPage.Log($"灞�鍩熺綉淇℃伅: \r\n{receiveString}");
 
             var res = receiveString.Split("\r\n\r\n");
 
@@ -738,8 +784,7 @@
                     }
                 }
 
-                MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic}  : 鍐呭: {res[1]}");
-
+                //MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic}  : 鍐呭: {res[1]}");
 
                 //楠岃瘉鏈夋晥鏁版嵁闀垮害
                 //if (res[1].Length != receiveObj.Length)
@@ -748,6 +793,40 @@
                 //    return receiveObj;
                 //}
                 receiveObj.BodyDataString = res[1];
+
+                //2021-09-23 杩囨护涓嶉渶瑕佽В瀵嗙殑涓婚 鐩墠鎼滅储缃戝叧涓婚涓嶅姞瀵�
+                if (receiveObj.Topic != CommunicationTopic.SearchLoaclGatewayReply)
+                {
+                    //鍒ゆ柇褰撳墠缃戝叧鏄惁寮�鍚簡鏈湴鍔犲瘑
+                    if (IsLocalEncryptAndGetAesKey)
+                    {
+                        MainPage.Log($"灞�鍩熺綉淇℃伅 寮�濮嬭В瀵�");
+                        if (originalReceiveBytes != null)
+                        {
+                            //鎷垮埌鍘熷Bytes鏁版嵁鍘昏В瀵�
+                            byte[] topicBytes = Encoding.UTF8.GetBytes(res[0]);
+                            byte[] bodyBytes = new byte[receiveObj.Length];
+                            Array.Copy(originalReceiveBytes, topicBytes.Length + 4, bodyBytes, 0, receiveObj.Length);
+                            byte[] receiveBytes = Securitys.EncryptionService.AesDecryptPayload(bodyBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
+                            var revString = Encoding.UTF8.GetString(receiveBytes);
+                            receiveObj.BodyDataString = revString;
+                            MainPage.Log($"灞�鍩熺綉淇℃伅: 瑙e瘑鍚庯細" + receiveObj.BodyDataString);
+                        }
+                        else
+                        {
+                            //鐩墠涓嶆嬁鍘熷Bytes鏁版嵁 瑙e瘑涓嶄簡
+                            //byte[] receiveBytes = Encoding.UTF8.GetBytes(res[1]);
+                            //MainPage.Log($"灞�鍩熺綉淇℃伅 receiveBytes {receiveBytes.Length}");
+                            //receiveBytes = Securitys.EncryptionService.AesDecryptPayload(receiveBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
+                            //MainPage.Log($"灞�鍩熺綉淇℃伅 瑙e瘑鍚庯細receiveBytes {receiveBytes.Length}");
+                            //var revString = Encoding.UTF8.GetString(receiveBytes);
+                            //receiveObj.BodyDataString = revString;
+                            //MainPage.Log($"灞�鍩熺綉淇℃伅: 瑙e瘑鍚庯細" + receiveObj.BodyDataString);
+                        }
+
+                    }
+                }
+
 
                 if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast)
                 {
@@ -772,7 +851,10 @@
                         {
                             Ins.GatewayId = device.device_mac;
                         }
-                        reportIp = device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧//"239.0.168.188";// 
+                        reportIp = device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧//"239.0.168.188";//
+                        //2021-09-23 鏂板鑾峰彇褰撳墠缃戝叧鏄惁鏈湴鍔犲瘑
+                        Ins.IsLocalEncrypt = device.isLocalEncrypt;
+                        //MainPage.Log("缃戝叧鏈湴鍔犲瘑鐘舵�侊細" + device.local_encrypt.ToString());
                     }
                 }
                 else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" ||

--
Gitblit v1.8.0