using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Edu.Common.Plugin { /// /// 加密方式 /// public enum EncryptMode { /// /// 不加密 /// None = 0, /// /// 16位MD5 -- (常规) /// MD5_16 = 1, /// /// 32位MD5 /// MD5_32 = 3 } /// /// 安全相关辅助类 /// public class SecurityHelper { /// /// des 加密密码 /// private static readonly string desKeyStr = "2019040812345678"; #region MD5 /// /// 使用32位MD5加密 /// /// 待加密字符串 /// public static string MD5(string str) { return MD5(str, 32); } /// /// 使用MD5加密 /// /// 待加密字符串 /// 加密位数 16 位 32 位 /// public static string MD5(string str, int code) { if (code == 32) return MD5(str, 0, 32); else return MD5(str, 8, 16); //默认8-16位 } /// /// 使用MD5加密 /// /// 待加密字符串 /// 截取的开始位置 /// 截取的结束 /// private static string MD5(string str, int startIndex, int endIndex) { string sEncrypt = ""; MD5 md5 = new MD5CryptoServiceProvider(); byte[] result = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str)); for (int i = 0; i < result.Length; i++) { sEncrypt += string.Format("{0:x}", result[i]).PadLeft(2, '0'); } //16位MD5加密(取32位加密的9~25字符) return sEncrypt.ToLower().Substring(startIndex, endIndex); } /// /// 获取大写的MD5签名结果 /// /// /// public static string MD5EncryptWeChat(string encypStr) { var m5 = new MD5CryptoServiceProvider(); byte[] inputBye; inputBye = Encoding.GetEncoding("utf-8").GetBytes(encypStr); var outputBye = m5.ComputeHash(inputBye); var retStr = BitConverter.ToString(outputBye); retStr = retStr.Replace("-", "").ToUpper(); return retStr; } #endregion #region DES /// /// Des解密(C#,java通用) /// /// /// public static string DesDecrypt(string encryptedString) { string keyString = desKeyStr.Substring(0, 8); byte[] btKey = Encoding.UTF8.GetBytes(keyString); byte[] btIv = Encoding.UTF8.GetBytes("12345678"); var des = new DESCryptoServiceProvider { Mode = CipherMode.CBC,//这里指定加密模式为CBC Padding = PaddingMode.PKCS7, Key = btKey, IV = btIv }; using var ms = new MemoryStream(); byte[] inData = Convert.FromBase64String(encryptedString); using (var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(inData, 0, inData.Length); cs.FlushFinalBlock(); } return Encoding.UTF8.GetString(ms.ToArray()); } /// /// Des加密(C#,java通用) /// /// /// public static string DesEncrypt(string sourceString) { string keyString = desKeyStr.Substring(0, 8); byte[] btIv = Encoding.UTF8.GetBytes("12345678"); byte[] btKey = Encoding.UTF8.GetBytes(keyString); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); using MemoryStream ms = new MemoryStream(); byte[] inData = Encoding.UTF8.GetBytes(sourceString); using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write)) { cs.Write(inData, 0, inData.Length); cs.FlushFinalBlock(); } return Convert.ToBase64String(ms.ToArray()); } #endregion } }