From f71e74b5f0d2716fbf05da016cdaa18d64e09f80 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期四, 31 十二月 2020 17:01:18 +0800
Subject: [PATCH] 又换完成最新门锁。空气质量传感器完成数据和基本配置功能。开发图表和自动化的同事可下载此代码

---
 ZigbeeApp/Shared/Phone/ZigBee/Common/SecuritySet.cs |  271 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 271 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Common/SecuritySet.cs b/ZigbeeApp/Shared/Phone/ZigBee/Common/SecuritySet.cs
new file mode 100755
index 0000000..12fed74
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Common/SecuritySet.cs
@@ -0,0 +1,271 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Security;
+
+namespace ZigBee.Common
+{
+    /// <summary>
+    /// 瀹夊叏绫�
+    /// </summary>
+    public static class SecuritySet
+    {
+        /// <summary>
+        /// Aes鍔犲瘑鏁版嵁
+        /// 閲囩敤128浣嶏紙16瀛楄妭锛夊垎缁勫姞瀵嗗拰瑙e瘑鏁版嵁锛屽姞瀵嗘ā寮忎负CBC锛屽亸绉婚噺锛坕v锛夊拰瀵嗛挜涓�鑷达紝濉厖妯″紡閲囩敤pkcs5鎴杙kcs7锛屽姞瀵嗙粨鏋滆緭鍑篵ase64缂栫爜銆�
+        /// </summary>
+        /// <returns>The encrypt.</returns>
+        /// <param name="bytes">P to encrypt.</param>
+        /// <param name="key">Key.</param>
+        public static string AesEncrypt(byte []bytes, string key)
+        {
+            if (bytes==null) 
+                return null;
+
+            //閰嶇疆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灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍
+            var resultArray = cTransform.TransformFinalBlock(bytes, 0, bytes.Length);
+
+            //灏咥ES鐢熸垚鐨勫瘑鏂囧瓧鑺傛暟缁勮浆鎴怋ase64瀛楃涓�
+            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
+        }
+
+        // <summary>
+        /// Aes鍔犲瘑鏁版嵁
+        /// 閲囩敤128浣嶏紙16瀛楄妭锛夊垎缁勫姞瀵嗗拰瑙e瘑鏁版嵁锛屽姞瀵嗘ā寮忎负CBC锛屽亸绉婚噺锛坕v锛夊拰瀵嗛挜涓�鑷达紝濉厖妯″紡閲囩敤pkcs5鎴杙kcs7锛屽姞瀵嗙粨鏋滆緭鍑篵ase64缂栫爜銆�
+        /// </summary>
+        /// <returns>The encrypt.</returns>
+        /// <param name="bytes">P to encrypt.</param>
+        /// <param name="key">Key.</param>
+        public static byte []AesEncryptBytes(byte[] bytes, string key)
+        {
+            if (bytes == null)
+                return null;
+
+            //閰嶇疆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(bytes, 0, bytes.Length);
+
+            //灏咥ES鐢熸垚鐨勫瘑鏂囧瓧鑺傛暟缁勮浆鎴怋ase64瀛楃涓�
+            //return Convert.ToBase64String(resultArray, 0, resultArray.Length);
+        }
+
+        /// <summary>
+        /// Aes 瑙e瘑鏁版嵁
+        /// </summary>
+        /// <returns>The decrypt.</returns>
+        /// <param name="pToDecrypt">P to decrypt.</param>
+        /// <param name="key">Key.</param>
+        public static byte []AesDecryptBytes(byte[] bytes, string key)
+        {
+            //AES瀵嗘枃Base64杞垚瀛楃涓�
+            var toEncryptArray = bytes;// Convert.FromBase64String(System.Text.Encoding.UTF8.GetString(bytes));
+
+            //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
+            var rm = new RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(key),
+                IV = Encoding.UTF8.GetBytes(key),
+                //Mode = CipherMode.ECB,
+                Mode = CipherMode.CBC,
+                Padding = PaddingMode.PKCS7
+            };
+
+            //鍒涘缓AES瑙e瘑鍣ㄥ璞�
+            var cTransform = rm.CreateDecryptor();
+
+            //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁�
+            return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+
+            //杞垚瀛楃涓�
+            //return Encoding.UTF8.GetString(resultArray);
+        }
+
+        /// <summary>
+        /// Aes 瑙e瘑鏁版嵁
+        /// </summary>
+        /// <returns>The decrypt.</returns>
+        /// <param name="pToDecrypt">P to decrypt.</param>
+        /// <param name="key">Key.</param>
+        public static string AesDecrypt(byte []bytes, string key)
+        {
+            //AES瀵嗘枃Base64杞垚瀛楃涓�
+            var toEncryptArray = Convert.FromBase64String(System.Text.Encoding.UTF8.GetString(bytes));
+
+            //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
+            var rm = new RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(key),
+                IV = Encoding.UTF8.GetBytes(key),
+                //Mode = CipherMode.ECB,
+                Mode = CipherMode.CBC,
+                Padding = PaddingMode.PKCS7
+            };
+
+            //鍒涘缓AES瑙e瘑鍣ㄥ璞�
+            var cTransform = rm.CreateDecryptor();
+
+            //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁�
+            var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+
+            //杞垚瀛楃涓�
+            return Encoding.UTF8.GetString(resultArray);
+        }
+
+        /// <summary>
+        /// DES杩涜鍔犲瘑
+        /// </summary>
+        /// <param name="passwordToEncrypt"></param>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        public static string DESEncrypt(string passwordToEncrypt, string key)
+        {
+            try
+            {
+                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
+                {
+                    byte[] inputByteArray = Encoding.UTF8.GetBytes(passwordToEncrypt);
+                    des.Key = ASCIIEncoding.ASCII.GetBytes(key);
+                    des.IV = ASCIIEncoding.ASCII.GetBytes(key);
+
+                    MemoryStream ms = new MemoryStream();
+
+                    using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
+                    {
+                        cs.Write(inputByteArray, 0, inputByteArray.Length);
+                        cs.FlushFinalBlock();
+                        cs.Close();
+                    }
+                    string str = Convert.ToBase64String(ms.ToArray());
+                    ms.Close();
+                    return str;
+                }
+            }
+            catch
+            {
+                return "error:鍔犲瘑澶辫触!";
+            }
+        }
+
+        /// <summary>
+        /// DES杩涜瑙e瘑
+        /// </summary>
+        /// <param name="pToDecrypt"></param>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        public static string DESDecrypt(string pToDecrypt, string key)
+        {
+            try
+            {
+                byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
+                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
+                {
+                    des.Key = ASCIIEncoding.ASCII.GetBytes(key);
+                    des.IV = ASCIIEncoding.ASCII.GetBytes(key);
+
+                    MemoryStream ms = new MemoryStream();
+                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
+                    {
+                        cs.Write(inputByteArray, 0, inputByteArray.Length);
+                        cs.FlushFinalBlock();
+                        cs.Close();
+                    }
+                    string str = Encoding.UTF8.GetString(ms.ToArray());
+                    ms.Close();
+                    return str;
+                }
+            }
+            catch
+            {
+                return "error:瑙e瘑澶辫触!";
+            }
+        }
+
+        /// <summary>
+        ///鑾峰彇pem鍏挜姝f枃鍐呭
+        /// </summary>
+        /// <param name="filePath">绉侀挜璇佷功璺緞</param>
+        /// <returns></returns>
+        public static string publicKeyContent(string content)
+        {
+            try
+            {
+                string publickeyConent = content.Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", "").Replace("\n", "").Replace("\r", "");//鍘绘帀璇佷功鐨勫ご閮ㄥ拰灏鹃儴
+                return publickeyConent;
+            }
+            catch (Exception ex)
+            { 
+                var msg = $"鑾峰彇pem鍏挜姝f枃鍐呭鎶涘嚭寮傚父,{ex.Message}";
+                System.Console.WriteLine(msg);
+                return msg;
+            }
+        }
+
+        /// <summary>
+        /// 鎶婂叕閽ヨ浆鎹㈡垚.net鐨剎ml鏍煎紡
+        /// </summary>
+        /// <param name="privateKey">java鎻愪緵鐨勭涓夋柟鍏挜</param>
+        /// <returns></returns>
+        public static string ConvertToXmlPublicJavaKey(this RSA rsa, string publicJavaKey)
+        {
+            RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicJavaKey));
+            string xmlpublicKey = string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
+            Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
+            Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
+            return xmlpublicKey;
+        }
+
+        /// <summary>
+        /// RSA鍔犲瘑
+        /// </summary>
+        /// <param name="sSource" >Source string</param>
+        /// <param name="sPublicKey" >public key</param>
+        /// <returns></returns>
+        public static string RSAEncrypt(string publickey, string content)
+        {
+            try
+            {
+                var pk = publicKeyContent(publickey);
+                var rsa = new RSACryptoServiceProvider();
+                var publickeyTemp = ConvertToXmlPublicJavaKey(rsa, pk);
+
+                byte[] cipherbytes;
+                rsa.FromXmlString(publickeyTemp);
+                cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
+                return Convert.ToBase64String(cipherbytes);
+            }
+            catch(Exception ex)
+            {
+                var msg = $"RSA鍔犲瘑澶辫触_{ex.Message}";
+                System.Console.WriteLine(msg);
+                return msg; 
+            }
+
+        }
+    }
+}

--
Gitblit v1.8.0