DES加密And解密
加密分为:单向加密,双向加密和对称加密。
单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原。算法代表:Base64,MD5,SHA;
双向加密:与单向加密相反,可以把密文逆推还原成明文,双向加密又分为对称加密和非对称加密。
对称加密:指数据使用者必须拥有相同的密钥才可以进行加密解密,就像彼此约定的一串暗号。算法代表:DES,3DES,AES,IDEA,RC4,RC5;
DES加密原理
DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
DES加密/解密代码
1 //加密 2 public static string Encode(string decryptString="需要加密的字符串", string encryptKey = "加密方式") 3 { 4 StringBuilder sb = new StringBuilder(); 5 using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) 6 { 7 byte[] key = ASCIIEncoding.ASCII.GetBytes(encryptKey); 8 byte[] iv = ASCIIEncoding.ASCII.GetBytes(encryptKey); 9 byte[] dataByteArray = Encoding.UTF8.GetBytes(decryptString); 10 des.Mode = System.Security.Cryptography.CipherMode.CBC; 11 des.Key = key; 12 des.IV = iv; 13 string encrypt = ""; 14 using (MemoryStream ms = new MemoryStream()) 15 using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) 16 { 17 cs.Write(dataByteArray, 0, dataByteArray.Length); 18 cs.FlushFinalBlock(); 19 encrypt = Convert.ToBase64String(ms.ToArray()); 20 } 21 string str1 = Decrypt(encrypt); 22 return encrypt.Replace("+","%2b");//在页面间传递的时候可能会使‘+’字符丢失所以用‘%2b’替换 23 } 24 } 25 26 27 28 29 //解密 30 public static string Decrypt(string decryptString="需要解密的字符串", string encryptKey = "加密方式") 31 { 32 try 33 {
decryptstring=decryptstring.Replace("%2b","+");//解密的时候替换回原本的加密字符串 34 byte[] inputByteArray = Convert.FromBase64String(decryptString); 35 using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) 36 { 37 des.Key = ASCIIEncoding.ASCII.GetBytes(encryptKey); 38 des.IV = ASCIIEncoding.ASCII.GetBytes(encryptKey); 39 System.IO.MemoryStream ms = new System.IO.MemoryStream(); 40 using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) 41 { 42 cs.Write(inputByteArray, 0, inputByteArray.Length); 43 cs.FlushFinalBlock(); 44 cs.Close(); 45 } 46 string str1 = Encoding.UTF8.GetString(ms.ToArray()); 47 ms.Close(); 48 return str1; 49 } 50 } 51 catch (Exception ex) 52 { 53 return null; 54 } 55 }