1、加密解密工具类(MD5,DES,AES,Base64,SHA256)
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace cjavapy.helper { /// <summary> /// 加、解密帮助类 /// </summary> public static class Cryptography { /// <summary> /// 计算32位MD5 /// </summary> /// <param name="str">需要计算的字符串</param> /// <returns>32位的MD5值</returns> public static string ToMd5(this string str) { var bytes = Encoding.UTF8.GetBytes(str); return bytes.ToMd5(); } public static string ToMd5(this byte[] bytes) { #if !NETSTANDARD var md5 = new MD5CryptoServiceProvider(); #else var md5 = MD5.Create(); #endif var targetData = md5.ComputeHash(bytes); return BitConverter.ToString(targetData).Replace("-", "").ToLower(); } /// <summary> /// 计算8位MD5 /// </summary> /// <param name="str">需要计算的字符串</param> /// <returns>8位的MD5值</returns> public static string ToShortMd5(this string str) { return ToMd5(str).Substring(8, 16).ToLower(); } /// <summary> /// DES加密 /// </summary> /// <param name="key">秘钥</param> /// <param name="str">需要加密的字符串</param> /// <returns>加密后的字符串</returns> public static string ToDes(string key, string str) { var cryptoProvider = new DESCryptoServiceProvider(); var bytes = Encoding.ASCII.GetBytes(key); var crypto = cryptoProvider.CreateEncryptor(bytes, bytes); var ms = new MemoryStream(); var cst = new CryptoStream(ms, crypto, CryptoStreamMode.Write); var sw = new StreamWriter(cst); sw.Write(str); sw.Flush(); cst.FlushFinalBlock(); sw.Flush(); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); } #region Base64加密解密 /// <summary> /// Base64是一種使用64基的位置計數法。它使用2的最大次方來代表僅可列印的ASCII 字元。 /// 這使它可用來作為電子郵件的傳輸編碼。在Base64中的變數使用字元A-Z、a-z和0-9 , /// 這樣共有62個字元,用來作為開始的64個數字,最後兩個用來作為數字的符號在不同的 /// 系統中而不同。 /// Base64加密 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string Base64Encrypt(this string str) { byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(str); return Convert.ToBase64String(encbuff); } /// <summary> /// Base64解密 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string Base64Decrypt(this string str) { byte[] decbuff = Convert.FromBase64String(str); return System.Text.Encoding.UTF8.GetString(decbuff); } #endregion #region SHA256加密算法 /// <summary> /// SHA256函数 /// </summary> /// <param name="str">原始字符串</param> /// <returns>SHA256结果(返回长度为44字节的字符串)</returns> public static string SHA256(this string str) { byte[] SHA256Data = Encoding.UTF8.GetBytes(str); SHA256Managed Sha256 = new SHA256Managed(); byte[] Result = Sha256.ComputeHash(SHA256Data); return Convert.ToBase64String(Result); //返回长度为44字节的字符串 } #endregion /// <summary> /// AES加密算法 /// </summary> /// <param name="input">明文字符串</param> /// <returns>字符串</returns> public static string EncryptByAES(string input, string key, string iv) { if (string.IsNullOrWhiteSpace(input)) { return input; } using (RijndaelManaged rijndaelManaged = new RijndaelManaged()) { rijndaelManaged.Mode = CipherMode.CBC; rijndaelManaged.Padding = PaddingMode.PKCS7; rijndaelManaged.FeedbackSize = 128; rijndaelManaged.Key = Encoding.UTF8.GetBytes(key); rijndaelManaged.IV = Encoding.UTF8.GetBytes(iv); ICryptoTransform encryptor = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(input); } byte[] bytes = msEncrypt.ToArray(); return Convert.ToBase64String(bytes); } } } } /// <summary> /// AES解密 /// </summary> /// <param name="input">密文字节数组</param> /// <returns>返回解密后的字符串</returns> public static string DecryptByAES(string input, string key, string iv) { if (string.IsNullOrWhiteSpace(input)) { return input; } var buffer = Convert.FromBase64String(input); using (RijndaelManaged rijndaelManaged = new RijndaelManaged()) { rijndaelManaged.Mode = CipherMode.CBC; rijndaelManaged.Padding = PaddingMode.PKCS7; rijndaelManaged.FeedbackSize = 128; rijndaelManaged.Key = Encoding.UTF8.GetBytes(key); rijndaelManaged.IV = Encoding.UTF8.GetBytes(iv); ICryptoTransform decryptor = rijndaelManaged.CreateDecryptor(rijndaelManaged.Key, rijndaelManaged.IV); using (MemoryStream msEncrypt = new MemoryStream(buffer)) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srEncrypt = new StreamReader(csEncrypt)) { return srEncrypt.ReadToEnd(); } } } } } } }
2、使用示例代码
"www.cjavapy.com".ToMd5(); "www.cjavapy.com".ToShortMd5(); Cryptography.ToDes("cjavapy","hello world!!!"); "www.cjavapy.com".Base64Encrypt(); "www.cjavapy.com".SHA256(); Cryptography.EncryptByAES("137", "CJAVAPmXcuAksWmF", "V33CQ1428SI8ZNMT"); Cryptography.DecryptByAES( "v9BxRJX+ojPDhyJFrglcbA==","CJAVAPmXcuAksWmF","V33CQ1428SI8ZNMT");