zoukankan      html  css  js  c++  java
  • 利用CryptoStream进行加密解密

     public class DBSecurity
        {
           //sKey sIV这两个自己随意设定,不能外泄
            private const string sKey = "11,22,33,43,34,56,65,78";
            private const string sIV = "12,23,21,34,65,56,85,96";
            # region 加密解密
            //方法 
            //加密方法 
            public static string Encrypt(string pToEncrypt)
            {
                try
                {
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    //把字符串放到byte数组中             
                    byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
    
                    //建立加密对象的密钥和偏移量
    
                    byte[] b_key = new byte[8];
                    string[] s_keys = new string[8];
                    s_keys = sKey.Split(',');
    
    
                    for (int i = 0; i <= 7; i++)
                    {
                        b_key[i] = Convert.ToByte(s_keys[i].ToString());
                    }
    
                    des.Key = b_key;
    
                    byte[] b_iv = new byte[8];
                    string[] s_ivs = new string[8];
                    s_ivs = sIV.Split(',');
    
    
                    for (int i = 0; i <= 7; i++)
                    {
                        b_iv[i] = Convert.ToByte(s_ivs[i].ToString());
                    }
    
                    des.IV = b_iv;
    
    
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                    //Write the byte array into the crypto stream 
                    //(It will end up in the memory stream) 
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    //Get the data back from the memory stream, and into a string 
                    StringBuilder ret = new StringBuilder();
                    foreach (byte b in ms.ToArray())
                    {
                        //Format as hex 
                        ret.AppendFormat("{0:X2}", b);
                    }
                    ret.ToString();
                    return ret.ToString();
                }
                catch
                {
                    return "";
                }
    
            }
    
    
            //解密方法 
            public static string Decrypt(string pToDecrypt)
            {
                try
                {
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    
                    //Put the input string into the byte array 
                    byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
                    for (int x = 0; x < pToDecrypt.Length / 2; x++)
                    {
                        int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                        inputByteArray[x] = (byte)i;
                    }
    
                    //建立加密对象的密钥和偏移量,此值重要,不能修改 
                    byte[] b_key = new byte[8];
                    string[] s_keys = new string[8];
                    s_keys = sKey.Split(',');
    
    
                    for (int i = 0; i <= 7; i++)
                    {
                        b_key[i] = Convert.ToByte(s_keys[i].ToString());
                    }
    
                    des.Key = b_key;
    
                    byte[] b_iv = new byte[8];
                    string[] s_ivs = new string[8];
                    s_ivs = sIV.Split(',');
    
    
                    for (int i = 0; i <= 7; i++)
                    {
                        b_iv[i] = Convert.ToByte(s_ivs[i].ToString());
                    }
    
                    des.IV = b_iv;
    
    
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                    //Flush the data through the crypto stream into the memory stream 
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
    
                    //Get the decrypted data back from the memory stream 
                    //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 
                    StringBuilder ret = new StringBuilder();
    
                    return System.Text.Encoding.Default.GetString(ms.ToArray());
                }
                catch (Exception exp)
                {
                    string s = exp.Message.ToString();
                    return "";
                }
            }
    
    
            #endregion
        }
  • 相关阅读:
    购买软件,主要购买服务;没有服务软件,不要钱,也不要用
    ArcGIS二次开发实践— — 遍历ToolBox中的工具!
    arcgis 3种方法快速制作tpk文件(转)
    ArcGIS10.x Engine直连提示连接超时ORA-12170 来自:http://www.iarcgis.com/?p=1004
    地球Gauss_Kruger中央0度经线图
    zoom to raster resolution
    2015年十亿美元级“独角兽公司”都是怎样的? 美国69家成榜首
    这103家独角兽公司,有谁能在美国过上好日子?
    全球各地最全102家“独角兽”企业名单
    2016年中国独角兽企业估值榜 TOP300
  • 原文地址:https://www.cnblogs.com/zhouxiuquan/p/3435007.html
Copyright © 2011-2022 走看看