陈嘉乐
2020-11-30 ed3bfb7462d44747230437717e8673a5192f833f
HDL_ON/DAL/Net/MqttCommon.cs
New file
@@ -0,0 +1,196 @@
using System.Collections.Generic;
using System;
using System.Text;
using System.Security.Cryptography;
namespace HDL_ON.DAL.Net
{
    public class RemoteRequestParameters
    {
        public string RequestVersion;
        public int RequestSource;
        public string LoginAccessToken;
        public int RequestProtocolType;
        public int HdlGatewayGatewayType = 0;
        public bool IsRedirectSelectEmqServer = false;
        /// <summary>
        /// 平台类型字符串
        /// </summary>
        public string PlatformStr;
        /// <summary>
        /// 发布主题负载
        /// </summary>
        public string PublishPayloadJsonStr;
        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 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>
            /// 加密主题为Base64
            /// </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);
                //将AES生成的密文字节数组转成Base64字符串
                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 解密
            /// <summary>
            /// 解密主题数据
            /// </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解密器对象
                ICryptoTransform cTransform = rm.CreateDecryptor();
                //使用AES将密文流转成明文的字节数组
                Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
                //转成字符串
                return Encoding.UTF8.GetString(resultArray);
            }
            /// <summary>
            /// 采用Aes解密负载数据
            /// </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解密器对象
                var cTransform = rm.CreateDecryptor();
                //使用AES将密文流转成明文的字节数组
                return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            }
            #endregion
        }
    }
}