using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text; using UnityEngine; namespace MyFrameworkPure { /// /// 加密工具类 /// public static class EncryptTool { /// /// 计算字符串的MD5值 /// public static string md5(string source) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] data = System.Text.Encoding.UTF8.GetBytes(source); byte[] md5Data = md5.ComputeHash(data, 0, data.Length); md5.Clear(); string destString = ""; for (int i = 0; i < md5Data.Length; i++) { destString += System.Convert.ToString(md5Data[i], 16).PadLeft(2, '0'); } destString = destString.PadLeft(32, '0'); return destString; } /// /// 计算文件的MD5值 /// public static string md5file(string file) { try { FileStream fs = new FileStream(file, FileMode.Open); System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] retVal = md5.ComputeHash(fs); fs.Close(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < retVal.Length; i++) { sb.Append(retVal[i].ToString("x2")); } return sb.ToString(); } catch (Exception ex) { throw new Exception("md5file() fail, error:" + ex.Message); } } /// /// 对称加密与解密 /// /// /// /// public static string Encrypt(string encryptStr, string key = "aescodtuy@#p^sfd") { byte[] keyArray = Encoding.UTF8.GetBytes(key); byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptStr); RijndaelManaged rDel = new RijndaelManaged { Key = keyArray, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } public static string Decrypt(string decryptStr, string key = "aescodtuy@#p^sfd") { try { byte[] keyArray = Encoding.UTF8.GetBytes(key); byte[] toEncryptArray = Convert.FromBase64String(decryptStr); RijndaelManaged rDel = new RijndaelManaged { Key = keyArray, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; ICryptoTransform cTransform = rDel.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Encoding.UTF8.GetString(resultArray); } catch (Exception e) { Debug.Log(e.ToString()); } return string.Empty; } /// /// base16编码 /// /// /// /// public static string Base16Encrypt(string str, string[] autoCode = null) { string innerStr = string.Empty; StringBuilder strEn = new StringBuilder(); if (autoCode == null || autoCode.Length < 16) autoCode = new string[] { "a", "2", "B", "g", "E", "5", "f", "6", "C", "8", "o", "9", "Z", "p", "k", "M" }; System.Collections.ArrayList arr = new System.Collections.ArrayList(System.Text.Encoding.Default.GetBytes(str)); for (int i = 0; i < arr.Count; i++) { byte data = (byte)arr[i]; int v1 = data >> 4; strEn.Append(autoCode[v1]); int v2 = ((data & 0x0f) << 4) >> 4; strEn.Append(autoCode[v2]); } return strEn.ToString(); } /// /// base64编码 /// /// /// public static string Base64Encode(string str) { var bytes = Encoding.UTF8.GetBytes(str); return Convert.ToBase64String(bytes); } /// /// base64解码 /// /// /// public static string Base64Decode(string str) { var bytes = Convert.FromBase64String(str); return Encoding.UTF8.GetString(bytes); } /// /// sha1加密 /// /// /// public static string Sha1(string str) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(str)); var sb = new StringBuilder(hash.Length * 2); foreach (byte b in hash) { // can be "x2" if you want lowercase sb.Append(b.ToString("X2")); } return sb.ToString(); } } } }