using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace NXWMS.Client.Code.Security { /// /// 加密算法类 /// public static class SecurityCryptography { #region Base64加密解密 /// /// Base64加密 /// /// 需要加密的字符串 /// public static string Base64Encrypt(string input) { return Base64Encrypt(input, new UTF8Encoding()); } /// /// Base64加密 /// /// 需要加密的字符串 /// 字符编码 /// public static string Base64Encrypt(string input, Encoding encode) { return Convert.ToBase64String(encode.GetBytes(input)); } /// /// Base64解密 /// /// 需要解密的字符串 /// public static string Base64Decrypt(string input) { return Base64Decrypt(input, new UTF8Encoding()); } /// /// Base64解密 /// /// 需要解密的字符串 /// 字符的编码 /// public static string Base64Decrypt(string input, Encoding encode) { return encode.GetString(Convert.FromBase64String(input)); } #endregion #region MD5 HASH算法 /// /// MD5 HASH算法 /// /// /// public static string GetMd5Hash(string input) { if (input == null) { return null; } MD5 md5Hash = MD5.Create(); // 将输入字符串转换为字节数组并计算哈希数据 byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); // 创建一个 Stringbuilder 来收集字节并创建字符串 StringBuilder sBuilder = new StringBuilder(); // 循环遍历哈希数据的每一个字节并格式化为十六进制字符串 for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } // 返回十六进制字符串 return sBuilder.ToString(); } #endregion #region SHA1加密的字符串 /// /// SHA1加密的字符串 /// /// /// public static string GetSHA1(String input) { SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); byte[] str1 = Encoding.UTF8.GetBytes(input); byte[] str2 = sha1.ComputeHash(str1); sha1.Clear(); (sha1 as IDisposable).Dispose(); return Convert.ToBase64String(str2); } #endregion #region DES加密 /// /// DES加密 /// /// 加密数据 /// 8位字符的密钥字符串 /// 8位字符的初始化向量字符串 /// public static string DESEncrypt(string data, string key = "thuman..", string iv = "thuman..") { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); int i = cryptoProvider.KeySize; MemoryStream ms = new MemoryStream(); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cst); sw.Write(data); sw.Flush(); cst.FlushFinalBlock(); sw.Flush(); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); } #endregion #region DES解密 /// /// DES解密 /// /// 解密数据 /// 8位字符的密钥字符串(需要和加密时相同) /// 8位字符的初始化向量字符串(需要和加密时相同) /// public static string DESDecrypt(string data, string key = "thuman..", string iv = "thuman..") { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv); byte[] byEnc; try { byEnc = Convert.FromBase64String(data); } catch { return null; } DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(byEnc); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); StreamReader sr = new StreamReader(cst); return sr.ReadToEnd(); } #endregion } }