using Microsoft.VisualBasic; using System.Security.Cryptography; using System.Text; namespace RB_MES_API.Context { /// /// 密码管理 /// public class AESHelp { private static string appkey = "RB@8636926"; /// /// 加密 /// /// 原文 /// 密文(Base64字符串) public static string Encrypt(string sourceText) { return Encrypt(sourceText, appkey); } /// /// 加密 /// Key和IV将被转换为MD5值 /// /// 原文 /// 密匙 /// 密文(Base64字符串) private static string Encrypt(string sourceText, string sKey) { var des = DES.Create(); byte[] inputByteArray; inputByteArray = Encoding.Default.GetBytes(sourceText); des.Key = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); des.IV = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); foreach (byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ms.Dispose(); cs.Dispose(); des.Dispose(); return ret.ToString(); } /// /// 解密 /// /// 密文 /// 原文 public static string Decrypt(string cipherText) { if (!string.IsNullOrEmpty(cipherText)) { return Decrypt(cipherText, appkey); } else { return ""; } } /// /// 解密 /// /// 加密文本 /// 密匙 /// private static string Decrypt(string sourceText, string sKey) { var des = DES.Create(); int len; len = sourceText.Length / 2; byte[] inputByteArray = new byte[len]; int x, i; for (x = 0; x < len; x++) { i = Convert.ToInt32(sourceText.Substring(x * 2, 2), 16); inputByteArray[x] = (byte)i; } des.Key = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); des.IV = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); byte[] msstr = ms.ToArray(); cs.Dispose(); ms.Dispose(); des.Dispose(); return Encoding.Default.GetString(msstr); } /// /// 32位MD5加密 /// /// 要转为byte[]的文本 /// private static string Md5Hash(string input) { MD5 md5Hasher = MD5.Create(); byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } md5Hasher.Dispose(); return sBuilder.ToString(); } /// /// 金蝶K3、KIS系列用户解密。想要加密算法的,联系13823037922 /// /// /// public static string K3Decrypt(string password) { if (password == null) return string.Empty; int lenint, ASCInt1, ASCInt2, iMod, i; string UnEncryptStrt, sMidStr; UnEncryptStrt = ""; i = 1; iMod = 1; password = Strings.Mid(password, 51, (Strings.Len(password) - 50)); lenint = Strings.Len(password); while (i < lenint) { sMidStr = Strings.Mid(password, i, 1); ASCInt1 = Strings.Asc(sMidStr); i = i + 1; sMidStr = Strings.Mid(password, i, 1); ASCInt2 = Strings.Asc(sMidStr); iMod = iMod % 3; if (iMod == 1) { UnEncryptStrt = UnEncryptStrt + Strings.Chr((ASCInt1 - 32) * 64 + ASCInt2 - 32); i = i + 1; } if (iMod == 2) { UnEncryptStrt = UnEncryptStrt + Strings.Chr((int)((ASCInt1 - 32) * 16 + (ASCInt2 - 32) / (double)4)); i = i + 1; } if (iMod == 0) UnEncryptStrt = UnEncryptStrt + Strings.Chr((int)((ASCInt1 - 32) * 4 + (ASCInt2 - 32) / (double)16)); i = i + 1; iMod = iMod + 1; } return UnEncryptStrt; } /// /// AES 加密 /// /// 明文(待加密) /// 密文 /// public static string AesEncrypt(string str, string key) { if (string.IsNullOrEmpty(str)) return null; Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str); var rm = Aes.Create(); rm.Key = Encoding.UTF8.GetBytes(key); rm.Mode = CipherMode.ECB; rm.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rm.CreateEncryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } /// /// AES 解密 /// /// 明文(待解密) /// 密文 /// public static string AesDecrypt(string str, string key) { if (string.IsNullOrEmpty(str)) return null; Byte[] toEncryptArray = Convert.FromBase64String(str); var rm = Aes.Create(); rm.Key = Encoding.UTF8.GetBytes(key); rm.Mode = CipherMode.ECB; rm.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rm.CreateDecryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Encoding.UTF8.GetString(resultArray); } } }