using System;
using System.Collections.Generic;using System.IO;using System.Linq;using System.Security.Cryptography;using System.Text;using System.Threading.Tasks;namespace CCTVRigthsCenter.Util{ public class EncryptHelper { /// <summary> /// MD5 hash加密 /// </summary> /// <param name="s"></param> /// <returns></returns> public static string MD5(string s) { var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); var result = BitConverter.ToString(md5.ComputeHash(UnicodeEncoding.UTF8.GetBytes(s.Trim()))); return result; } public static string GetMD5HashFromFile(Stream file) { try { System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] retVal = md5.ComputeHash(file); 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("GetMD5HashFromFile() fail,error:" + ex.Message); } } #region DES加密解密 //默认密钥向量 private static byte[] keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; /// <summary> /// DES加密字符串 /// </summary> /// <param name="encryptString">待加密的字符串</param> /// <param name="encryptKey">加密密钥,要求为8位</param> /// <returns>加密成功返回加密后的字符串,失败返回源串</returns> public static string Encode(string encryptString, string encryptKey = "cmyprint") { encryptKey = encryptKey.Substring(0, 8); encryptKey = encryptKey.PadRight(8, ' '); byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] rgbIV = keys; byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); return Convert.ToBase64String(mStream.ToArray()); } /// <summary> /// WebApi的basic认证里的加密 /// </summary> /// <param name="data"></param> /// <param name="application"></param> /// <param name="key"></param> /// <param name="IV"></param> /// <returns></returns> public static string Encode(string data, string application = "IOS", string key = "swkj1111", string IV = "swkj1111") { byte[] inputByteArray = Encoding.UTF8.GetBytes(data); byte[] rgbKey = Encoding.UTF8.GetBytes(key); byte[] rgbIV = Encoding.UTF8.GetBytes(IV); DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); string desString = Convert.ToBase64String(mStream.ToArray()); return EncodeBase64(Encoding.UTF8, application + ":" + desString); } /// <summary> /// DES解密字符串 /// </summary> /// <param name="decryptString">待解密的字符串</param> /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param> /// <returns>解密成功返回解密后的字符串,失败返源串</returns> public static string Decode(string decryptString, string decryptKey = "cmyprint") { try { decryptKey = decryptKey.Substring(0, 8); decryptKey = decryptKey.PadRight(8, ' '); byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey); byte[] rgbIV = keys; byte[] inputByteArray = Convert.FromBase64String(decryptString); DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); return Encoding.UTF8.GetString(mStream.ToArray()); } catch { return ""; } } #endregion #region Base64加解密 /// <summary> /// Base64加密 /// </summary> /// <param name="codeName">加密采用的编码方式</param> /// <param name="source">待加密的明文</param> /// <returns></returns> private static string EncodeBase64(Encoding encode, string source) { string strRulst; byte[] bytes = encode.GetBytes(source); try { strRulst = Convert.ToBase64String(bytes); } catch { strRulst = source; } return strRulst; } /// <summary> /// Base64加密,采用utf8编码方式加密 /// </summary> /// <param name="source">待加密的明文</param> /// <returns>加密后的字符串</returns> public static string EncodeBase64(string source) { return EncodeBase64(Encoding.UTF8, source); } /// <summary> /// Base64解密 /// </summary> /// <param name="codeName">解密采用的编码方式,注意和加密时采用的方式一致</param> /// <param name="result">待解密的密文</param> /// <returns>解密后的字符串</returns> private static string DecodeBase64(Encoding encode, string result) { string decode = ""; byte[] bytes = Convert.FromBase64String(result); try { decode = encode.GetString(bytes); } catch { decode = result; } return decode; } /// <summary> /// Base64解密,采用utf8编码方式解密 /// </summary> /// <param name="result">待解密的密文</param> /// <returns>解密后的字符串</returns> public static string DecodeBase64(string result) { return DecodeBase64(Encoding.UTF8, result); } #endregion #region BEGIN 新增加密 add by show 2016-10-10 16:09:20 /// <summary> /// DES加密字符串 /// </summary> /// <param name="encryptString">待加密的字符串</param> /// <param name="application">应用名称</param> /// <param name="key">加密密钥,要求为8位</param> /// <param name="IV">加密密钥,要求为8位</param> /// <returns>加密成功返回加密后的字符串,失败返回源串</returns> public static string EncryptApplicationAndURL(string encryptString, string application, string key, string IV) { try { byte[] rgbKey = Encoding.UTF8.GetBytes(key); byte[] rgbIV = Encoding.UTF8.GetBytes(IV); byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); string desString = Convert.ToBase64String(mStream.ToArray()); return EncryptHelper.EncodeBase64(application + ":" + desString); } catch { throw; } } /// <summary> /// 描述:Base64URLSafe解密 /// 作者:show /// 时间:2016-10-10 09:07:20 /// </summary> /// <param name="text"></param> /// <returns></returns> public static string Base64URLSafeDecode(string text) { if (String.IsNullOrEmpty(text)) return ""; text = text.Replace('-', '+').Replace('_', '/'); var yu = text.Length % 4; if (yu > 0) { text = text.PadRight(text.Length + 4 - yu, '='); } return Encoding.UTF8.GetString(Convert.FromBase64String(text)); } /// <summary> /// 描述:URL安全的base64编码 /// 作者:show /// 时间:2016-10-10 15:50:20 /// </summary> /// <param name="text">要编码的字符串</param> /// <returns></returns> public static string ToBase64URLSafe(string text) { if (String.IsNullOrEmpty(text)) return ""; byte[] bs = Encoding.UTF8.GetBytes(text); var encodedStr = Convert.ToBase64String(bs); encodedStr = encodedStr.Replace('+', '-').Replace('/', '_').TrimEnd('='); return encodedStr; } #endregion END 新增加密 }}