开发通用类 - 字符串加密、解密篇
/// <summary> /// MD5加密 /// </summary> /// <param name="source"></param> /// <returns></returns> public static string EncryptByMd5(string source) { return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5"); }
/// <summary> /// DES加密 /// </summary> /// <param name="source">待加密字符串</param> /// <param name="key">密钥</param> /// <returns></returns> public static string EncryptByDes(string source, string key) { using (var des = new DESCryptoServiceProvider()) { byte[] sourceArray = Encoding.UTF8.GetBytes(source); des.Key = Encoding.ASCII.GetBytes(key); des.IV = Encoding.ASCII.GetBytes(key); var memoryStream = new MemoryStream(); using (var cryptoStream = new CryptoStream(memoryStream, des.CreateEncryptor(), CryptoStreamMode.Write)) { cryptoStream.Write(sourceArray, 0, sourceArray.Length); cryptoStream.FlushFinalBlock(); cryptoStream.Close(); } string str = Convert.ToBase64String(memoryStream.ToArray()); memoryStream.Close(); return str; } } /// <summary> /// DES解密 /// </summary> /// <param name="source">加密字符串</param> /// <param name="key">密钥</param> /// <returns></returns> public static string DecryptByDes(string source, string key) { byte[] sourceArray = Convert.FromBase64String(source); using (var des = new DESCryptoServiceProvider()) { des.Key = Encoding.ASCII.GetBytes(key); des.IV = Encoding.ASCII.GetBytes(key); var memoryStream = new MemoryStream(); using (var cryptoStream = new CryptoStream(memoryStream, des.CreateDecryptor(), CryptoStreamMode.Write)) { cryptoStream.Write(sourceArray, 0, sourceArray.Length); cryptoStream.FlushFinalBlock(); cryptoStream.Close(); } string str = Encoding.UTF8.GetString(memoryStream.ToArray()); memoryStream.Close(); return str; } }
/// <summary> /// 3DES加密 /// key1: qJzGEh6hESZDVJeCnFPGuxzaiB7NLQM3 /// key2: qcDY6X+aPLw= /// </summary> /// <param name="source">待加密字符串</param> /// <param name="key1">密钥</param> /// <param name="key2">矢量,矢量可以为空</param> /// <returns></returns> public static string EncryptBy3Des(string source, string key1, string key2) { using (SymmetricAlgorithm symmetricAlgorithm = new TripleDESCryptoServiceProvider()) { symmetricAlgorithm.Key = Convert.FromBase64String(key1); symmetricAlgorithm.IV = Convert.FromBase64String(key2); symmetricAlgorithm.Mode = CipherMode.ECB; symmetricAlgorithm.Padding = PaddingMode.PKCS7; ICryptoTransform iCryptoTransform = symmetricAlgorithm.CreateEncryptor(symmetricAlgorithm.Key, symmetricAlgorithm.IV); byte[] sourceArray = Encoding.UTF8.GetBytes(source); var memoryStream = new MemoryStream(); using (var cryptoStream = new CryptoStream(memoryStream, iCryptoTransform, CryptoStreamMode.Write)) { cryptoStream.Write(sourceArray, 0, sourceArray.Length); cryptoStream.FlushFinalBlock(); cryptoStream.Close(); } string str = Convert.ToBase64String(memoryStream.ToArray()); memoryStream.Close(); return str; } } /// <summary> /// 3DES解密 /// </summary> /// <param name="source">加密字符串</param> /// <param name="key1">密钥 </param> /// <param name="key2">矢量,矢量可以为空</param> /// <returns></returns> public static string DecryptBy3Des(string source, string key1, string key2) { using (SymmetricAlgorithm symmetricAlgorithm = new TripleDESCryptoServiceProvider()) { symmetricAlgorithm.Key = Convert.FromBase64String(key1); symmetricAlgorithm.IV = Convert.FromBase64String(key2); symmetricAlgorithm.Mode = CipherMode.ECB; symmetricAlgorithm.Padding = PaddingMode.PKCS7; ICryptoTransform iCryptoTransform = symmetricAlgorithm.CreateDecryptor(symmetricAlgorithm.Key, symmetricAlgorithm.IV); byte[] sourceArray = Convert.FromBase64String(source); var memoryStream = new MemoryStream(); using (var cryptoStream = new CryptoStream(memoryStream, iCryptoTransform, CryptoStreamMode.Write)) { cryptoStream.Write(sourceArray, 0, sourceArray.Length); cryptoStream.FlushFinalBlock(); cryptoStream.Close(); } string str = Encoding.UTF8.GetString(memoryStream.ToArray()); memoryStream.Close(); return str; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)