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