using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace Ant.Service.Common.CryptHelper { public class DESCrypt { #region ========算法======== private static string key;//密钥 static DESCrypt() { key = System.Configuration.ConfigurationManager.AppSettings["deskey"].ToString(); } private static byte[] Keys = new byte[] { 0x12, 0x34, 0x56, 120, 0x90, 0xab, 0xcd, 0xef };//8个bit位,是DES算法的初始化向量 加解密钥也是8位; /// /// 解密字符串 /// /// 是要被解密的密文数据 /// DES算法的工作密钥 /// 明文 public static string Decrypt(string decryptString, string decryptKey) { try { decryptKey = Utils.GetSubString(decryptKey, 8, ""); decryptKey = decryptKey.PadRight(8, ' '); byte[] bytes = Encoding.UTF8.GetBytes(decryptKey); byte[] keys = Keys; byte[] buffer = Convert.FromBase64String(decryptString); DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); MemoryStream stream = new MemoryStream(); CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(bytes, keys), CryptoStreamMode.Write); stream2.Write(buffer, 0, buffer.Length); stream2.FlushFinalBlock(); return Encoding.UTF8.GetString(stream.ToArray()); } catch { return ""; } } /// /// 加密 /// /// 要被加密数据 /// DES算法的工作密钥 /// 密文 public static string Encrypt(string encryptString, string encryptKey) { encryptKey = Utils.GetSubString(encryptKey, 8, ""); encryptKey = encryptKey.PadRight(8, ' '); byte[] bytes = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] keys = Keys; byte[] buffer = Encoding.UTF8.GetBytes(encryptString); DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); MemoryStream stream = new MemoryStream(); CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(bytes, keys), CryptoStreamMode.Write); stream2.Write(buffer, 0, buffer.Length); stream2.FlushFinalBlock(); return Convert.ToBase64String(stream.ToArray());//Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节。 //Base64编码可用于在HTTP环境下传递较长的标识信息,如较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数,或者将二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。 } #endregion #region ========加密======== /// /// 加密 /// /// /// public static string Encrypt(string Text) { return Encrypt(Text, key); } #endregion #region ========解密======== /// /// 解密 /// /// /// public static string Decrypt(string Text) { return Decrypt(Text, key); } #endregion } }