zoukankan      html  css  js  c++  java
  • 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 }
     
     
  • 相关阅读:
    SQLite存储类(数据类型)
    SQLite常用命令
    C# 跨线程操作无效
    Android打开新的Activity并同时关闭当前Activity
    SQLite实现Top功能
    Android调用Sqlite数据库时自动生成db-journal文件的原因
    C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
    Android计算时间差
    PS通道抠图总结
    Android再次激活Activity时触发事件用于列表重新读取载入
  • 原文地址:https://www.cnblogs.com/ZxtIsCnblogs/p/7681786.html
Copyright © 2011-2022 走看看