using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace FAuth.Extensions.Decryptor { /// /// 加密帮助类 /// public class EncryptyWorker { /// /// 补位填充方式 /// public PaddingMode Padding { get; set; } /// /// 加密算法模式 /// public CipherMode Cipher { get; set; } /// /// 初始化向量 /// public byte[] IV { get; set; } /// /// 加密字符串获取Base64密文 /// /// 加密key /// 要加密的字符串 public string Encrypty(string key,string str) { if(key.Length < 8) { throw new Exception("加密用的key长度为8位"); } byte[] bKey = Encoding.UTF8.GetBytes(key.Substring(0,8)); byte[] bStr = Encoding.UTF8.GetBytes(str); var desc = createProvider(); using(var mStream = new MemoryStream()) { using(var cStream = new CryptoStream(mStream,desc.CreateEncryptor(bKey,IV),CryptoStreamMode.Write)) { cStream.Write(bStr,0,bStr.Length); cStream.FlushFinalBlock(); return Convert.ToBase64String(mStream.ToArray()); } } } /// /// 从Base64密文解密,获取字符串 /// /// 加密键 /// 密文 public string DesCrypty(string key,string str) { if(key.Length < 8) { throw new Exception("加密用的key长度为8位"); } var bStr = Convert.FromBase64String(str); byte[] bKey = Encoding.UTF8.GetBytes(key.Substring(0,8)); var desc = createProvider(); using(var mStream = new MemoryStream()) { using(var cStream = new CryptoStream(mStream,desc.CreateDecryptor(bKey,IV),CryptoStreamMode.Write)) { cStream.Write(bStr,0,bStr.Length); cStream.FlushFinalBlock(); return Encoding.UTF8.GetString(mStream.ToArray()); } } } private DESCryptoServiceProvider createProvider() { var desc = new DESCryptoServiceProvider(); desc.Padding = this.Padding; desc.Mode = this.Cipher; return desc; } private static EncryptyWorker Deshelper { get; set; } private EncryptyWorker() { } /// /// 重用模式获取默认加密帮助器 /// public static EncryptyWorker GetHelper() { if(Deshelper == null) { byte[] IV = { 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08 }; Deshelper = GetHelper(PaddingMode.PKCS7,CipherMode.CBC,IV); } return Deshelper; } /// /// 生成新的加密帮助器 /// /// 补位方式 /// 加密算法模式 /// 初始化向量 public static EncryptyWorker GetHelper(PaddingMode padding,CipherMode cipher,byte[] IV) { return new EncryptyWorker { Cipher = cipher, IV = IV, Padding = padding, }; } } }