• 利用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
        }
  • 相关阅读:
    层的问题,
    创建一个函数,返回元素个数为n的int型数组中的最小值
    c语言中编写函数求五个学生中的最高分
    c语言中没有形参的函数(例题:逆向输出正整数)
    创建一个函数,对元素个数为n的int型数组进行倒序排列。
    c语言 函数中数组的传递, 形参和实参。
    c语言中函数的传递和const类型的修饰符
    c语言中的文件作用域、函数原型声明、定义声明和非定义声明
    c语言中文件包含指令和头文件
    c语言中数组元素的线性查找
  • 原文地址:https://www.cnblogs.com/zhouxiuquan/p/3435007.html
Copyright © 2020-2023  润新知