C#-DES加解密帮助类
1 class DesHelper 2 { 3 #region DES 加密 4 5 /// <summary> 6 /// 加密(Hex) 7 /// Add by 成长的小猪(Jason.Song) on 2017/07/26 8 /// </summary> 9 /// <param name="encryptString">待加密的字符串</param> 10 /// <param name="encryptKey">加密密钥(8位任意字符)</param> 11 /// <param name="encoding">字符编码</param> 12 /// <param name="cipher">运算模式</param> 13 /// <param name="padding">填充模式</param> 14 /// <returns></returns> 15 public static string EncryptToHexString(string encryptString, string encryptKey, Encoding encoding, 16 CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros) 17 { 18 //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦 19 //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8)); 20 var keyBytes = encoding.GetBytes(encryptKey); 21 var inputBytes = encoding.GetBytes(encryptString); 22 var outputBytes = EncryptToDesBytes(inputBytes, keyBytes, cipher, padding); 23 var sBuilder = new StringBuilder(); 24 foreach (var b in outputBytes) 25 { 26 sBuilder.Append(b.ToString("X2")); 27 } 28 return sBuilder.ToString(); 29 } 30 31 /// <summary> 32 /// 加密(Base64) 33 /// Add by 成长的小猪(Jason.Song) on 2017/07/26 34 /// </summary> 35 /// <param name="encryptString">待加密的字符串</param> 36 /// <param name="encryptKey">加密密钥(8位任意字符)</param> 37 /// <param name="encoding">字符编码</param> 38 /// <param name="cipher">运算模式</param> 39 /// <param name="padding">填充模式</param> 40 /// <returns></returns> 41 public static string EncryptToBase64String(string encryptString, string encryptKey, Encoding encoding, 42 CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros) 43 { 44 //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦 45 //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8)); 46 var keyBytes = encoding.GetBytes(encryptKey); 47 var inputBytes = encoding.GetBytes(encryptString); 48 var outputBytes = EncryptToDesBytes(inputBytes, keyBytes, cipher, padding); 49 return Convert.ToBase64String(outputBytes); 50 } 51 52 /// <summary> 53 /// 加密 54 /// Add by 成长的小猪(Jason.Song) on 2017/07/26 55 /// </summary> 56 /// <param name="encryptBytes">待加密的字节数组</param> 57 /// <param name="keyBytes">加密密钥字节数组</param> 58 /// <param name="cipher">运算模式</param> 59 /// <param name="padding">填充模式</param> 60 /// <returns></returns> 61 public static byte[] EncryptToDesBytes(byte[] encryptBytes, byte[] keyBytes, 62 CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros) 63 { 64 var des = new DESCryptoServiceProvider 65 { 66 Key = keyBytes, 67 IV = keyBytes, 68 Mode = cipher, 69 Padding = padding 70 }; 71 var outputBytes = des.CreateEncryptor().TransformFinalBlock(encryptBytes, 0, encryptBytes.Length); 72 return outputBytes; 73 } 74 75 #endregion 76 77 #region DES 解密 78 79 /// <summary> 80 /// 解密(Hex) 81 /// Add by 成长的小猪(Jason.Song) on 2017/07/26 82 /// </summary> 83 /// <param name="decryptString">待解密的字符串</param> 84 /// <param name="decryptKey">解密密钥(8位任意字符)</param> 85 /// <param name="encoding">字符编码</param> 86 /// <param name="cipher">运算模式</param> 87 /// <param name="padding">填充模式</param> 88 /// <returns></returns> 89 public static string DecryptByHexString(string decryptString, string decryptKey, Encoding encoding, 90 CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.PKCS7) 91 { 92 //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦 93 //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8)); 94 var keyBytes = encoding.GetBytes(decryptKey); 95 var inputBytes = new byte[decryptString.Length / 2]; 96 for (var i = 0; i < inputBytes.Length; i++) 97 { 98 inputBytes[i] = Convert.ToByte(decryptString.Substring(i * 2, 2), 16); 99 } 100 var outputBytes = DecryptByDesBytes(inputBytes, keyBytes, cipher, padding); 101 return encoding.GetString(outputBytes).TrimEnd('\0'); 102 } 103 104 /// <summary> 105 /// 解密(Base64) 106 /// Add by 成长的小猪(Jason.Song) on 2017/07/26 107 /// </summary> 108 /// <param name="decryptString">待解密的字符串</param> 109 /// <param name="decryptKey">解密密钥(8位任意字符)</param> 110 /// <param name="encoding">字符编码</param> 111 /// <param name="cipher">运算模式</param> 112 /// <param name="padding">填充模式</param> 113 /// <returns></returns> 114 public static string DecryptByBase64String(string decryptString, string decryptKey, Encoding encoding, 115 CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros) 116 { 117 //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦 118 //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8)); 119 var keyBytes = encoding.GetBytes(decryptKey); 120 var inputBytes = Convert.FromBase64String(decryptString); 121 var outputBytes = DecryptByDesBytes(inputBytes, keyBytes, cipher, padding); 122 return encoding.GetString(outputBytes).TrimEnd('\0'); 123 } 124 125 /// <summary> 126 /// 解密 127 /// Add by 成长的小猪(Jason.Song) on 2017/07/26 128 /// </summary> 129 /// <param name="decryptBytes">待解密的字节数组</param> 130 /// <param name="keyBytes">解密密钥字节数组</param> 131 /// <param name="cipher">运算模式</param> 132 /// <param name="padding">填充模式</param> 133 /// <returns></returns> 134 public static byte[] DecryptByDesBytes(byte[] decryptBytes, byte[] keyBytes, 135 CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros) 136 { 137 var des = new DESCryptoServiceProvider 138 { 139 Key = keyBytes, 140 IV = keyBytes, 141 Mode = cipher, 142 Padding = padding 143 }; 144 var outputBytes = des.CreateDecryptor().TransformFinalBlock(decryptBytes, 0, decryptBytes.Length); 145 return outputBytes; 146 } 147 148 #endregion 149 150 }
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/14620784.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?