using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace HH.WCS.Mobox3.NFLZ.util { class CryptoDecryptHelper { public static void Test() { #region 后台调用 企业微信自建应用程序 实现 实时报警功能 //App:tUI9CvF7d3b7_j8njXEQOdp4TGn_aPuALtNYuh9SGb8 通讯录:BIrQFYaP6E5ZBYkRHUjeFU2IkzCqsokIM5Bct74U9ec //bool result = WeiXin.Init(1000002, "ww0b0c7633edccae9c", "tUI9CvF7d3b7_j8njXEQOdp4TGn_aPuALtNYuh9SGb8"); //if (result) //{ // WeiXin.SendMessageToUser("郑如嶺","111111111"); //} #endregion #region AES+MD5 加密解密功能 //var str = JsonConvert.SerializeObject(new { platform = "111", actionType = 1, taskNo = "111111", reqTime = "2022-08-03 14:12:00" }); //var res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to"); //res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to",enmKeyBit.KeyBit128); //res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to", enmKeyBit.KeyBit192); //var req = AESDecrypt(res, "de987awms8nfsspt22731o2ts0j833to"); //string TokenMsg = ""; //var httpVerify = Settings.GetHttpApiVerifyList().Where(a => a.VerifyNo == "1" && a.Project == Settings.ProjectName && a.Enable == "1").FirstOrDefault(); //if (httpVerify != null) TokenMsg = httpVerify.Extend[0] + "from" + httpVerify.Extend[1] + "timestamp" + DateTime.Now.ToString().Replace("/","-"); //Console.WriteLine($"加密前明文:{TokenMsg}"); //string TokenMsgEncrypt = GetMd5FromString(TokenMsg); //Console.WriteLine($"加密后密文1:{TokenMsgEncrypt}"); //TokenMsgEncrypt = GetMd5Hash(TokenMsg); //Console.WriteLine($"加密后密文2:{TokenMsgEncrypt}"); //TokenMsgEncrypt = MD5Encrypt16(TokenMsg); //Console.WriteLine($"加密后密文16:{TokenMsgEncrypt}"); //TokenMsgEncrypt = MD5Encrypt32(TokenMsg); //Console.WriteLine($"加密后密文32:{TokenMsgEncrypt}"); //TokenMsgEncrypt = MD5Encrypt64(TokenMsg); //Console.WriteLine($"加密后密文64:{TokenMsgEncrypt}"); #endregion } public enum enmKeyBit { KeyBit128 = 128, KeyBit192 = 192, KeyBit256 = 256, } /// /// AES ECB模式 加密 /// /// 明文 /// 密钥 /// 密钥位数 /// public static string AESEncrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256) { if (string.IsNullOrEmpty(data)) { return string.Empty; } try { int intKeyBit = (int)keyBit; RijndaelManaged aes = new RijndaelManaged(); byte[] bytsData = Encoding.UTF8.GetBytes(data); byte[] bytsKey = new Byte[intKeyBit / 8]; Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length); aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.KeySize = intKeyBit; aes.Key = bytsKey; //aes.IV = iv; ICryptoTransform ctf = aes.CreateEncryptor(); byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length); return Convert.ToBase64String(bytsResult); } catch { return string.Empty; } } /// /// AES ECB模式 解密 /// /// 密文 /// 密钥 /// 密钥位数 /// public static string AESDecrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256) { if (string.IsNullOrEmpty(data)) { return string.Empty; } try { int intKeyBit = (int)keyBit; RijndaelManaged aes = new RijndaelManaged(); byte[] bytsData = Convert.FromBase64String(data); byte[] bytsKey = new Byte[intKeyBit / 8]; Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length); aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.KeySize = intKeyBit; aes.Key = bytsKey; //aes.IV = iv; ICryptoTransform ctf = aes.CreateDecryptor(); byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length); return UTF8Encoding.UTF8.GetString(bytsResult); } catch { return string.Empty; } } /// /// MD5加密 /// /// /// public static string GetMd5FromString(string sInput) { var lstData = Encoding.GetEncoding("utf-8").GetBytes(sInput); var lstHash = new MD5CryptoServiceProvider().ComputeHash(lstData); var result = new StringBuilder(32); for (int i = 0; i < lstHash.Length; i++) { result.Append(lstHash[i].ToString("x2").ToUpper()); } return result.ToString(); } /// /// MD5加密方式二 /// /// /// static string GetMd5Hash(string input) { using (MD5 md5 = MD5.Create()) { byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(input)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sb.Append(data[i].ToString("x2")); } return sb.ToString(); } } /// /// 16位MD5加密 /// /// /// public static string MD5Encrypt16(string password) { var md5 = new MD5CryptoServiceProvider(); string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8); t2 = t2.Replace("-", ""); return t2; } /// /// 32位MD5加密 /// /// /// public static string MD5Encrypt32(string password) { string cl = password; string pwd = ""; MD5 md5 = MD5.Create(); //实例化一个md5对像 // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择  byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl)); // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 for (int i = 0; i < s.Length; i++) { // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 pwd = pwd + s[i].ToString("X"); } return pwd; } /// /// 64位MD5加密 /// /// /// public static string MD5Encrypt64(string password) { string cl = password; //string pwd = ""; MD5 md5 = MD5.Create(); //实例化一个md5对像 // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择  byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl)); return Convert.ToBase64String(s); } } }