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);
}
}
}