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.NongFuChaYuan.OtherService
|
{
|
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,
|
}
|
/// <summary>
|
/// AES ECB模式 加密
|
/// </summary>
|
/// <param name="data">明文</param>
|
/// <param name="key">密钥</param>
|
/// <param name="keyBit">密钥位数</param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
/// <summary>
|
/// AES ECB模式 解密
|
/// </summary>
|
/// <param name="data">密文</param>
|
/// <param name="key">密钥</param>
|
/// <param name="keyBit">密钥位数</param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// MD5加密
|
/// </summary>
|
/// <param name="sInput"></param>
|
/// <returns></returns>
|
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();
|
}
|
/// <summary>
|
/// MD5加密方式二
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
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();
|
}
|
}
|
|
/// <summary>
|
/// 16位MD5加密
|
/// </summary>
|
/// <param name="password"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 32位MD5加密
|
/// </summary>
|
/// <param name="password"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 64位MD5加密
|
/// </summary>
|
/// <param name="password"></param>
|
/// <returns></returns>
|
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);
|
}
|
}
|
}
|