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('